diff --git a/v2/contracts/evm/ERC20Custody.sol b/v2/contracts/evm/ERC20Custody.sol index d575d87a..50191fa9 100644 --- a/v2/contracts/evm/ERC20Custody.sol +++ b/v2/contracts/evm/ERC20Custody.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.26; import { IERC20Custody } from "./interfaces/IERC20Custody.sol"; -import { IGatewayEVM } from "./interfaces/IGatewayEVM.sol"; +import { IGatewayEVM, MessageContext } from "./interfaces/IGatewayEVM.sol"; import { RevertContext } from "../../contracts/Revert.sol"; @@ -140,11 +140,13 @@ contract ERC20Custody is /// @notice WithdrawAndCall transfers tokens to Gateway and call a contract through the Gateway. /// @dev This function can only be called by the TSS address. + /// @param messageContext Message context containing sender. /// @param to Address of the contract to call. /// @param token Address of the ERC20 token. /// @param amount Amount of tokens to withdraw. /// @param data Calldata to pass to the contract call. function withdrawAndCall( + MessageContext calldata messageContext, address to, address token, uint256 amount, @@ -161,7 +163,7 @@ contract ERC20Custody is IERC20(token).safeTransfer(address(gateway), amount); // Forward the call to the Gateway contract - gateway.executeWithERC20(token, to, amount, data); + gateway.executeWithERC20(messageContext, token, to, amount, data); emit WithdrawnAndCalled(to, token, amount, data); } diff --git a/v2/contracts/evm/GatewayEVM.sol b/v2/contracts/evm/GatewayEVM.sol index 9910de66..1b0242df 100644 --- a/v2/contracts/evm/GatewayEVM.sol +++ b/v2/contracts/evm/GatewayEVM.sol @@ -122,7 +122,7 @@ contract GatewayEVM is emit Reverted(destination, address(0), msg.value, data, revertContext); } - /// @notice Executes an authenticated call to a destination address without ERC20 tokens. + /// @notice Executes a call to a destination address without ERC20 tokens. /// @dev This function can only be called by the TSS address and it is payable. /// @param messageContext Message context containing sender. /// @param destination Address to call. @@ -142,30 +142,14 @@ contract GatewayEVM is { if (destination == address(0)) revert ZeroAddress(); bytes memory result; - result = _executeAuthenticatedCall(messageContext, destination, data); - - emit Executed(destination, msg.value, data); - - return result; - } - - /// @notice Executes an arbitrary call to a destination address without ERC20 tokens. - /// @dev This function can only be called by the TSS address and it is payable. - /// @param destination Address to call. - /// @param data Calldata to pass to the call. - /// @return The result of the call. - function execute( - address destination, - bytes calldata data - ) - external - payable - onlyRole(TSS_ROLE) - whenNotPaused - returns (bytes memory) - { - if (destination == address(0)) revert ZeroAddress(); - bytes memory result = _executeArbitraryCall(destination, data); + // Execute the call on the target contract + // if sender is provided in messageContext call is authenticated and target is Callable.onCall + // otherwise, call is arbitrary + if (messageContext.sender == address(0)) { + result = _executeArbitraryCall(destination, data); + } else { + result = _executeAuthenticatedCall(messageContext, destination, data); + } emit Executed(destination, msg.value, data); @@ -175,11 +159,13 @@ contract GatewayEVM is /// @notice Executes a call to a destination contract using ERC20 tokens. /// @dev This function can only be called by the custody or connector address. /// It uses the ERC20 allowance system, resetting gateway allowance at the end. + /// @param messageContext Message context containing sender. /// @param token Address of the ERC20 token. /// @param to Address of the contract to call. /// @param amount Amount of tokens to transfer. /// @param data Calldata to pass to the call. function executeWithERC20( + MessageContext calldata messageContext, address token, address to, uint256 amount, @@ -196,7 +182,13 @@ contract GatewayEVM is if (!_resetApproval(token, to)) revert ApprovalFailed(); if (!IERC20(token).approve(to, amount)) revert ApprovalFailed(); // Execute the call on the target contract - _executeArbitraryCall(to, data); + // if sender is provided in messageContext call is authenticated and target is Callable.onCall + // otherwise, call is arbitrary + if (messageContext.sender == address(0)) { + _executeArbitraryCall(to, data); + } else { + _executeAuthenticatedCall(messageContext, to, data); + } // Reset approval if (!_resetApproval(token, to)) revert ApprovalFailed(); diff --git a/v2/contracts/evm/ZetaConnectorBase.sol b/v2/contracts/evm/ZetaConnectorBase.sol index 02fbd93f..2b7f9db3 100644 --- a/v2/contracts/evm/ZetaConnectorBase.sol +++ b/v2/contracts/evm/ZetaConnectorBase.sol @@ -10,7 +10,12 @@ import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import { RevertContext } from "../../contracts/Revert.sol"; -import { IGatewayEVM, IGatewayEVMErrors, IGatewayEVMEvents } from "../../contracts/evm/interfaces/IGatewayEVM.sol"; +import { + IGatewayEVM, + IGatewayEVMErrors, + IGatewayEVMEvents, + MessageContext +} from "../../contracts/evm/interfaces/IGatewayEVM.sol"; import "../../contracts/evm/interfaces/IZetaConnector.sol"; /// @title ZetaConnectorBase @@ -112,11 +117,13 @@ abstract contract ZetaConnectorBase is function withdraw(address to, uint256 amount, bytes32 internalSendHash) external virtual; /// @notice Withdraw tokens and call a contract through Gateway. + /// @param messageContext Message context containing sender. /// @param to The address to withdraw tokens to. /// @param amount The amount of tokens to withdraw. /// @param data The calldata to pass to the contract call. /// @param internalSendHash A hash used for internal tracking of the transaction. function withdrawAndCall( + MessageContext calldata messageContext, address to, uint256 amount, bytes calldata data, diff --git a/v2/contracts/evm/ZetaConnectorNative.sol b/v2/contracts/evm/ZetaConnectorNative.sol index 6abdd3bb..31f7e0af 100644 --- a/v2/contracts/evm/ZetaConnectorNative.sol +++ b/v2/contracts/evm/ZetaConnectorNative.sol @@ -46,6 +46,7 @@ contract ZetaConnectorNative is ZetaConnectorBase { } /// @notice Withdraw tokens and call a contract through Gateway. + /// @param messageContext Message context containing sender. /// @param to The address to withdraw tokens to. /// @param amount The amount of tokens to withdraw. /// @param data The calldata to pass to the contract call. @@ -53,6 +54,7 @@ contract ZetaConnectorNative is ZetaConnectorBase { // https://github.com/zeta-chain/protocol-contracts/issues/398) /// @dev This function can only be called by the TSS address. function withdrawAndCall( + MessageContext calldata messageContext, address to, uint256 amount, bytes calldata data, @@ -68,7 +70,7 @@ contract ZetaConnectorNative is ZetaConnectorBase { IERC20(zetaToken).safeTransfer(address(gateway), amount); // Forward the call to the Gateway contract - gateway.executeWithERC20(address(zetaToken), to, amount, data); + gateway.executeWithERC20(messageContext, address(zetaToken), to, amount, data); emit WithdrawnAndCalled(to, amount, data); } diff --git a/v2/contracts/evm/ZetaConnectorNonNative.sol b/v2/contracts/evm/ZetaConnectorNonNative.sol index 3b05f2cd..30dffb2a 100644 --- a/v2/contracts/evm/ZetaConnectorNonNative.sol +++ b/v2/contracts/evm/ZetaConnectorNonNative.sol @@ -61,12 +61,14 @@ contract ZetaConnectorNonNative is ZetaConnectorBase { } /// @notice Withdraw tokens and call a contract through Gateway. + /// @param messageContext Message context containing sender. /// @param to The address to withdraw tokens to. /// @param amount The amount of tokens to withdraw. /// @param data The calldata to pass to the contract call. /// @param internalSendHash A hash used for internal tracking of the transaction. /// @dev This function can only be called by the TSS address, and mints if supply is not reached. function withdrawAndCall( + MessageContext calldata messageContext, address to, uint256 amount, bytes calldata data, @@ -82,7 +84,7 @@ contract ZetaConnectorNonNative is ZetaConnectorBase { _mintTo(address(gateway), amount, internalSendHash); // Forward the call to the Gateway contract - gateway.executeWithERC20(address(zetaToken), to, amount, data); + gateway.executeWithERC20(messageContext, address(zetaToken), to, amount, data); emit WithdrawnAndCalled(to, amount, data); } diff --git a/v2/contracts/evm/interfaces/IERC20Custody.sol b/v2/contracts/evm/interfaces/IERC20Custody.sol index c84af4d2..5eb56b69 100644 --- a/v2/contracts/evm/interfaces/IERC20Custody.sol +++ b/v2/contracts/evm/interfaces/IERC20Custody.sol @@ -2,6 +2,8 @@ pragma solidity 0.8.26; import { RevertContext } from "../../../contracts/Revert.sol"; + +import { MessageContext } from "./IGatewayEVM.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; /// @title IERC20CustodyEvents @@ -71,11 +73,19 @@ interface IERC20Custody is IERC20CustodyEvents, IERC20CustodyErrors { /// @notice WithdrawAndCall transfers tokens to Gateway and call a contract through the Gateway. /// @dev This function can only be called by the TSS address. + /// @param messageContext Message context containing sender. /// @param token Address of the ERC20 token. /// @param to Address of the contract to call. /// @param amount Amount of tokens to withdraw. /// @param data Calldata to pass to the contract call. - function withdrawAndCall(address token, address to, uint256 amount, bytes calldata data) external; + function withdrawAndCall( + MessageContext calldata messageContext, + address token, + address to, + uint256 amount, + bytes calldata data + ) + external; /// @notice WithdrawAndRevert transfers tokens to Gateway and call a contract with a revert functionality through /// the Gateway. diff --git a/v2/contracts/evm/interfaces/IGatewayEVM.sol b/v2/contracts/evm/interfaces/IGatewayEVM.sol index 2b772c61..0f1ebcf9 100644 --- a/v2/contracts/evm/interfaces/IGatewayEVM.sol +++ b/v2/contracts/evm/interfaces/IGatewayEVM.sol @@ -100,11 +100,19 @@ interface IGatewayEVMErrors { /// @notice Interface for the GatewayEVM contract. interface IGatewayEVM is IGatewayEVMErrors, IGatewayEVMEvents { /// @notice Executes a call to a contract using ERC20 tokens. + /// @param messageContext Message context containing sender and arbitrary call flag. /// @param token The address of the ERC20 token. /// @param to The address of the contract to call. /// @param amount The amount of tokens to transfer. /// @param data The calldata to pass to the contract call. - function executeWithERC20(address token, address to, uint256 amount, bytes calldata data) external; + function executeWithERC20( + MessageContext calldata messageContext, + address token, + address to, + uint256 amount, + bytes calldata data + ) + external; /// @notice Transfers msg.value to destination contract and executes it's onRevert function. /// @dev This function can only be called by the TSS address and it is payable. @@ -119,12 +127,6 @@ interface IGatewayEVM is IGatewayEVMErrors, IGatewayEVMEvents { external payable; - /// @notice Executes a call to a contract. - /// @param destination The address of the contract to call. - /// @param data The calldata to pass to the contract call. - /// @return The result of the contract call. - function execute(address destination, bytes calldata data) external payable returns (bytes memory); - /// @notice Executes a call to a destination address without ERC20 tokens. /// @dev This function can only be called by the TSS address and it is payable. /// @param messageContext Message context containing sender and arbitrary call flag. diff --git a/v2/docs/src/contracts/evm/ERC20Custody.sol/contract.ERC20Custody.md b/v2/docs/src/contracts/evm/ERC20Custody.sol/contract.ERC20Custody.md index ba9963b6..30f94b50 100644 --- a/v2/docs/src/contracts/evm/ERC20Custody.sol/contract.ERC20Custody.md +++ b/v2/docs/src/contracts/evm/ERC20Custody.sol/contract.ERC20Custody.md @@ -208,6 +208,7 @@ WithdrawAndCall transfers tokens to Gateway and call a contract through the Gate ```solidity function withdrawAndCall( + MessageContext calldata messageContext, address to, address token, uint256 amount, @@ -222,6 +223,7 @@ function withdrawAndCall( |Name|Type|Description| |----|----|-----------| +|`messageContext`|`MessageContext`|Message context containing sender.| |`to`|`address`|Address of the contract to call.| |`token`|`address`|Address of the ERC20 token.| |`amount`|`uint256`|Amount of tokens to withdraw.| @@ -264,9 +266,6 @@ function withdrawAndRevert( Deposits asset to custody and pay fee in zeta erc20. -**Note:** -This method is deprecated. - ```solidity function deposit( diff --git a/v2/docs/src/contracts/evm/GatewayEVM.sol/contract.GatewayEVM.md b/v2/docs/src/contracts/evm/GatewayEVM.sol/contract.GatewayEVM.md index 4da40091..8d215268 100644 --- a/v2/docs/src/contracts/evm/GatewayEVM.sol/contract.GatewayEVM.md +++ b/v2/docs/src/contracts/evm/GatewayEVM.sol/contract.GatewayEVM.md @@ -85,9 +85,6 @@ uint256 public constant MAX_PAYLOAD_SIZE = 1024; ## Functions ### constructor -**Note:** -constructor - ```solidity constructor(); @@ -182,7 +179,7 @@ function executeRevert( ### execute -Executes an authenticated call to a destination address without ERC20 tokens. +Executes a call to a destination address without ERC20 tokens. *This function can only be called by the TSS address and it is payable.* @@ -215,38 +212,6 @@ function execute( |``|`bytes`|The result of the call.| -### execute - -Executes an arbitrary call to a destination address without ERC20 tokens. - -*This function can only be called by the TSS address and it is payable.* - - -```solidity -function execute( - address destination, - bytes calldata data -) - external - payable - onlyRole(TSS_ROLE) - whenNotPaused - returns (bytes memory); -``` -**Parameters** - -|Name|Type|Description| -|----|----|-----------| -|`destination`|`address`|Address to call.| -|`data`|`bytes`|Calldata to pass to the call.| - -**Returns** - -|Name|Type|Description| -|----|----|-----------| -|``|`bytes`|The result of the call.| - - ### executeWithERC20 Executes a call to a destination contract using ERC20 tokens. @@ -257,6 +222,7 @@ It uses the ERC20 allowance system, resetting gateway allowance at the end.* ```solidity function executeWithERC20( + MessageContext calldata messageContext, address token, address to, uint256 amount, @@ -271,6 +237,7 @@ function executeWithERC20( |Name|Type|Description| |----|----|-----------| +|`messageContext`|`MessageContext`|Message context containing sender.| |`token`|`address`|Address of the ERC20 token.| |`to`|`address`|Address of the contract to call.| |`amount`|`uint256`|Amount of tokens to transfer.| diff --git a/v2/docs/src/contracts/evm/ZetaConnectorBase.sol/abstract.ZetaConnectorBase.md b/v2/docs/src/contracts/evm/ZetaConnectorBase.sol/abstract.ZetaConnectorBase.md index b797eac1..d100542e 100644 --- a/v2/docs/src/contracts/evm/ZetaConnectorBase.sol/abstract.ZetaConnectorBase.md +++ b/v2/docs/src/contracts/evm/ZetaConnectorBase.sol/abstract.ZetaConnectorBase.md @@ -155,12 +155,21 @@ Withdraw tokens and call a contract through Gateway. ```solidity -function withdrawAndCall(address to, uint256 amount, bytes calldata data, bytes32 internalSendHash) external virtual; +function withdrawAndCall( + MessageContext calldata messageContext, + address to, + uint256 amount, + bytes calldata data, + bytes32 internalSendHash +) + external + virtual; ``` **Parameters** |Name|Type|Description| |----|----|-----------| +|`messageContext`|`MessageContext`|Message context containing sender.| |`to`|`address`|The address to withdraw tokens to.| |`amount`|`uint256`|The amount of tokens to withdraw.| |`data`|`bytes`|The calldata to pass to the contract call.| diff --git a/v2/docs/src/contracts/evm/ZetaConnectorNative.sol/contract.ZetaConnectorNative.md b/v2/docs/src/contracts/evm/ZetaConnectorNative.sol/contract.ZetaConnectorNative.md index 835d1ba6..7f41446c 100644 --- a/v2/docs/src/contracts/evm/ZetaConnectorNative.sol/contract.ZetaConnectorNative.md +++ b/v2/docs/src/contracts/evm/ZetaConnectorNative.sol/contract.ZetaConnectorNative.md @@ -62,6 +62,7 @@ Withdraw tokens and call a contract through Gateway. ```solidity function withdrawAndCall( + MessageContext calldata messageContext, address to, uint256 amount, bytes calldata data, @@ -77,6 +78,7 @@ function withdrawAndCall( |Name|Type|Description| |----|----|-----------| +|`messageContext`|`MessageContext`|Message context containing sender.| |`to`|`address`|The address to withdraw tokens to.| |`amount`|`uint256`|The amount of tokens to withdraw.| |`data`|`bytes`|The calldata to pass to the contract call.| diff --git a/v2/docs/src/contracts/evm/ZetaConnectorNonNative.sol/contract.ZetaConnectorNonNative.md b/v2/docs/src/contracts/evm/ZetaConnectorNonNative.sol/contract.ZetaConnectorNonNative.md index e77aae79..65f031a2 100644 --- a/v2/docs/src/contracts/evm/ZetaConnectorNonNative.sol/contract.ZetaConnectorNonNative.md +++ b/v2/docs/src/contracts/evm/ZetaConnectorNonNative.sol/contract.ZetaConnectorNonNative.md @@ -89,6 +89,7 @@ Withdraw tokens and call a contract through Gateway. ```solidity function withdrawAndCall( + MessageContext calldata messageContext, address to, uint256 amount, bytes calldata data, @@ -104,6 +105,7 @@ function withdrawAndCall( |Name|Type|Description| |----|----|-----------| +|`messageContext`|`MessageContext`|Message context containing sender.| |`to`|`address`|The address to withdraw tokens to.| |`amount`|`uint256`|The amount of tokens to withdraw.| |`data`|`bytes`|The calldata to pass to the contract call.| diff --git a/v2/docs/src/contracts/evm/interfaces/IERC20Custody.sol/interface.IERC20Custody.md b/v2/docs/src/contracts/evm/interfaces/IERC20Custody.sol/interface.IERC20Custody.md index 40000f51..7db1733c 100644 --- a/v2/docs/src/contracts/evm/interfaces/IERC20Custody.sol/interface.IERC20Custody.md +++ b/v2/docs/src/contracts/evm/interfaces/IERC20Custody.sol/interface.IERC20Custody.md @@ -42,12 +42,20 @@ WithdrawAndCall transfers tokens to Gateway and call a contract through the Gate ```solidity -function withdrawAndCall(address token, address to, uint256 amount, bytes calldata data) external; +function withdrawAndCall( + MessageContext calldata messageContext, + address token, + address to, + uint256 amount, + bytes calldata data +) + external; ``` **Parameters** |Name|Type|Description| |----|----|-----------| +|`messageContext`|`MessageContext`|Message context containing sender.| |`token`|`address`|Address of the ERC20 token.| |`to`|`address`|Address of the contract to call.| |`amount`|`uint256`|Amount of tokens to withdraw.| diff --git a/v2/docs/src/contracts/evm/interfaces/IGatewayEVM.sol/interface.IGatewayEVM.md b/v2/docs/src/contracts/evm/interfaces/IGatewayEVM.sol/interface.IGatewayEVM.md index 03094631..fd84efc5 100644 --- a/v2/docs/src/contracts/evm/interfaces/IGatewayEVM.sol/interface.IGatewayEVM.md +++ b/v2/docs/src/contracts/evm/interfaces/IGatewayEVM.sol/interface.IGatewayEVM.md @@ -14,12 +14,20 @@ Executes a call to a contract using ERC20 tokens. ```solidity -function executeWithERC20(address token, address to, uint256 amount, bytes calldata data) external; +function executeWithERC20( + MessageContext calldata messageContext, + address token, + address to, + uint256 amount, + bytes calldata data +) + external; ``` **Parameters** |Name|Type|Description| |----|----|-----------| +|`messageContext`|`MessageContext`|Message context containing sender and arbitrary call flag.| |`token`|`address`|The address of the ERC20 token.| |`to`|`address`|The address of the contract to call.| |`amount`|`uint256`|The amount of tokens to transfer.| @@ -51,28 +59,6 @@ function executeRevert( |`revertContext`|`RevertContext`|Revert context to pass to onRevert.| -### execute - -Executes a call to a contract. - - -```solidity -function execute(address destination, bytes calldata data) external payable returns (bytes memory); -``` -**Parameters** - -|Name|Type|Description| -|----|----|-----------| -|`destination`|`address`|The address of the contract to call.| -|`data`|`bytes`|The calldata to pass to the contract call.| - -**Returns** - -|Name|Type|Description| -|----|----|-----------| -|``|`bytes`|The result of the contract call.| - - ### execute Executes a call to a destination address without ERC20 tokens. diff --git a/v2/docs/src/contracts/zevm/GatewayZEVM.sol/contract.GatewayZEVM.md b/v2/docs/src/contracts/zevm/GatewayZEVM.sol/contract.GatewayZEVM.md index d60f97f8..c25989b0 100644 --- a/v2/docs/src/contracts/zevm/GatewayZEVM.sol/contract.GatewayZEVM.md +++ b/v2/docs/src/contracts/zevm/GatewayZEVM.sol/contract.GatewayZEVM.md @@ -58,9 +58,6 @@ modifier onlyProtocol(); ### constructor -**Note:** -constructor - ```solidity constructor(); diff --git a/v2/docs/src/contracts/zevm/interfaces/UniversalContract.sol/interface.zContract.md b/v2/docs/src/contracts/zevm/interfaces/UniversalContract.sol/interface.zContract.md index adcf0675..b2c6cb6e 100644 --- a/v2/docs/src/contracts/zevm/interfaces/UniversalContract.sol/interface.zContract.md +++ b/v2/docs/src/contracts/zevm/interfaces/UniversalContract.sol/interface.zContract.md @@ -1,10 +1,6 @@ # zContract [Git Source](https://github.com/zeta-chain/protocol-contracts/blob/main/v2/contracts/zevm/interfaces/UniversalContract.sol) -**Note:** -should be removed once v2 SystemContract is not used anymore. -UniversalContract should be used - ## Functions ### onCrossChainCall diff --git a/v2/docs/src/contracts/zevm/interfaces/UniversalContract.sol/struct.zContext.md b/v2/docs/src/contracts/zevm/interfaces/UniversalContract.sol/struct.zContext.md index e50ac885..e71230ac 100644 --- a/v2/docs/src/contracts/zevm/interfaces/UniversalContract.sol/struct.zContext.md +++ b/v2/docs/src/contracts/zevm/interfaces/UniversalContract.sol/struct.zContext.md @@ -1,10 +1,6 @@ # zContext [Git Source](https://github.com/zeta-chain/protocol-contracts/blob/main/v2/contracts/zevm/interfaces/UniversalContract.sol) -**Note:** -should be removed once v2 SystemContract is not used anymore. -MessageContext should be used - ```solidity struct zContext { diff --git a/v2/pkg/erc20custody.sol/erc20custody.go b/v2/pkg/erc20custody.sol/erc20custody.go index 3bd59609..0923bcd9 100644 --- a/v2/pkg/erc20custody.sol/erc20custody.go +++ b/v2/pkg/erc20custody.sol/erc20custody.go @@ -29,6 +29,11 @@ var ( _ = abi.ConvertType ) +// MessageContext is an auto generated low-level Go binding around an user-defined struct. +type MessageContext struct { + Sender common.Address +} + // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Sender common.Address @@ -39,8 +44,8 @@ type RevertContext struct { // ERC20CustodyMetaData contains all meta data concerning the ERC20Custody contract. var ERC20CustodyMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WHITELISTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setSupportsLegacy\",\"inputs\":[{\"name\":\"_supportsLegacy\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"supportsLegacy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unwhitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"whitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelisted\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedCustodyTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyMethodsNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a060405230608052348015601357600080fd5b5060805161299161003d600039600081816119610152818161198a0152611b6001526129916000f3fe6080604052600436106101c25760003560e01c806385f438c1116100f7578063ad3cb1cc11610095578063d9caed1211610064578063d9caed12146105f6578063e609055e14610616578063e63ab1e914610636578063eab103df1461066a57600080fd5b8063ad3cb1cc14610530578063c0c53b8b14610586578063d547741f146105a6578063d936547e146105c657600080fd5b806399a3c356116100d157806399a3c356146104bb5780639a590427146104db5780639b19251a146104fb578063a217fddf1461051b57600080fd5b806385f438c11461040257806391d1485414610436578063950837aa1461049b57600080fd5b80633f4ba83a11610164578063570618e11161013e578063570618e1146103625780635b112591146103965780635c975abb146103b65780638456cb59146103ed57600080fd5b80633f4ba83a146103255780634f1ef2861461033a57806352d1902d1461034d57600080fd5b8063248a9ca3116101a0578063248a9ca314610256578063252f07bf146102b35780632f2ff15d146102e557806336568abe1461030557600080fd5b806301ffc9a7146101c7578063116191b6146101fc57806321fc65f214610234575b600080fd5b3480156101d357600080fd5b506101e76101e23660046121a7565b61068a565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b5060005461021c906001600160a01b031681565b6040516001600160a01b0390911681526020016101f3565b34801561024057600080fd5b5061025461024f366004612247565b610723565b005b34801561026257600080fd5b506102a56102713660046122ba565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101f3565b3480156102bf57600080fd5b506002546101e79074010000000000000000000000000000000000000000900460ff1681565b3480156102f157600080fd5b506102546103003660046122d3565b6108cc565b34801561031157600080fd5b506102546103203660046122d3565b610916565b34801561033157600080fd5b50610254610967565b610254610348366004612332565b61099c565b34801561035957600080fd5b506102a56109bb565b34801561036e57600080fd5b506102a57f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b3480156103a257600080fd5b5060025461021c906001600160a01b031681565b3480156103c257600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101e7565b3480156103f957600080fd5b506102546109ea565b34801561040e57600080fd5b506102a57f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561044257600080fd5b506101e76104513660046122d3565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104a757600080fd5b506102546104b636600461243b565b610a1c565b3480156104c757600080fd5b506102546104d6366004612458565b610baf565b3480156104e757600080fd5b506102546104f636600461243b565b610d5d565b34801561050757600080fd5b5061025461051636600461243b565b610e11565b34801561052757600080fd5b506102a5600081565b34801561053c57600080fd5b506105796040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101f3919061251f565b34801561059257600080fd5b506102546105a1366004612570565b610ecb565b3480156105b257600080fd5b506102546105c13660046122d3565b6111f0565b3480156105d257600080fd5b506101e76105e136600461243b565b60016020526000908152604090205460ff1681565b34801561060257600080fd5b506102546106113660046125bb565b611234565b34801561062257600080fd5b506102546106313660046125fc565b61134b565b34801561064257600080fd5b506102a57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561067657600080fd5b5061025461068536600461269b565b611596565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061071d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61072b6115ec565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107558161166d565b61075d611677565b6001600160a01b03851660009081526001602052604090205460ff166107af576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546107c9906001600160a01b038781169116866116d5565b6000546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690635131ab599061081a9088908a90899089908990600401612701565b600060405180830381600087803b15801561083457600080fd5b505af1158015610848573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161089393929190612744565b60405180910390a3506108c560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546109068161166d565b610910838361176f565b50505050565b6001600160a01b0381163314610958576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610962828261183e565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109918161166d565b6109996118e4565b50565b6109a4611956565b6109ad82611a26565b6109b78282611a31565b5050565b60006109c5611b55565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a148161166d565b610999611bb7565b6000610a278161166d565b6001600160a01b038216610a67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610a9e907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b031661183e565b50600254610ad6907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b031661183e565b50610b017f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361176f565b50610b2c7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a8361176f565b50600254604080516001600160a01b03928316815291841660208301527f4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b610bb76115ec565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610be18161166d565b610be9611677565b6001600160a01b03861660009081526001602052604090205460ff16610c3b576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610c55906001600160a01b038881169116876116d5565b6000546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063aa0c0fc190610ca89089908b908a908a908a908a90600401612813565b600060405180830381600087803b158015610cc257600080fd5b505af1158015610cd6573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f7b53ec10a80164e60591c43d9c222e9354886981b880a3fba19c9ceb77fb972187878787604051610d23949392919061286a565b60405180910390a350610d5560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610d878161166d565b6001600160a01b038216610dc7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260016020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610e3b8161166d565b6001600160a01b038216610e7b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000818152600160208190526040808320805460ff1916909217909155517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610f165750825b905060008267ffffffffffffffff166001148015610f335750303b155b905081158015610f41575080155b15610f78576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610fd95784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0388161580610ff657506001600160a01b038716155b8061100857506001600160a01b038616155b1561103f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611047611c12565b61104f611c1a565b611057611c12565b61105f611c2a565b600080546001600160a01b03808b167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617835560028054918b16919092161790556110ad908761176f565b506110d87f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8761176f565b506111037f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8861176f565b5061112e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48861176f565b506111597f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a8761176f565b506111847f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a8861176f565b5083156111e65784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461122a8161166d565b610910838361183e565b61123c6115ec565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46112668161166d565b61126e611677565b6001600160a01b03831660009081526001602052604090205460ff166112c0576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112d46001600160a01b03841685846116d5565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb8460405161131991815260200190565b60405180910390a35061096260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6113536115ec565b61135b611677565b60025474010000000000000000000000000000000000000000900460ff166113af576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526001602052604090205460ff16611401576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611461573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114859190612896565b905061149c6001600160a01b038616333087611c3a565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190612896565b61155191906128af565b87876040516115649594939291906128e9565b60405180910390a250610d5560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60006115a18161166d565b506002805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611667576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6109998133611c73565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156116d3576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261096291859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611d00565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611834576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556117ea3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061071d565b600091505061071d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611834576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061071d565b6118ec611d7c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806119ef57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166119e37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156116d3576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109b78161166d565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611aa9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611aa691810190612896565b60015b611aef576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611b4b576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611ae6565b6109628383611dd7565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116d3576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bbf611677565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611938565b6116d3611e2d565b611c22611e2d565b6116d3611e94565b611c32611e2d565b6116d3611e9c565b6040516001600160a01b0384811660248301528381166044830152606482018390526109109186918216906323b872dd90608401611702565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166109b7576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611ae6565b6000611d156001600160a01b03841683611ecf565b90508051600014158015611d3a575080806020019051810190611d389190612922565b155b15610962576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611ae6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166116d3576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611de082611ee4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611e25576109628282611f8c565b6109b7612002565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166116d3576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611749611e2d565b611ea4611e2d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff19169055565b6060611edd8383600061203a565b9392505050565b806001600160a01b03163b600003611f33576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611ae6565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611fa9919061293f565b600060405180830381855af49150503d8060008114611fe4576040519150601f19603f3d011682016040523d82523d6000602084013e611fe9565b606091505b5091509150611ff98583836120f0565b95945050505050565b34156116d3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081471015612078576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611ae6565b600080856001600160a01b03168486604051612094919061293f565b60006040518083038185875af1925050503d80600081146120d1576040519150601f19603f3d011682016040523d82523d6000602084013e6120d6565b606091505b50915091506120e68683836120f0565b9695505050505050565b6060826121055761210082612165565b611edd565b815115801561211c57506001600160a01b0384163b155b1561215e576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611ae6565b5080611edd565b8051156121755780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156121b957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611edd57600080fd5b6001600160a01b038116811461099957600080fd5b60008083601f84011261221057600080fd5b50813567ffffffffffffffff81111561222857600080fd5b60208301915083602082850101111561224057600080fd5b9250929050565b60008060008060006080868803121561225f57600080fd5b853561226a816121e9565b9450602086013561227a816121e9565b935060408601359250606086013567ffffffffffffffff81111561229d57600080fd5b6122a9888289016121fe565b969995985093965092949392505050565b6000602082840312156122cc57600080fd5b5035919050565b600080604083850312156122e657600080fd5b8235915060208301356122f8816121e9565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561234557600080fd5b8235612350816121e9565b9150602083013567ffffffffffffffff81111561236c57600080fd5b8301601f8101851361237d57600080fd5b803567ffffffffffffffff81111561239757612397612303565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561240357612403612303565b60405281815282820160200187101561241b57600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561244d57600080fd5b8135611edd816121e9565b60008060008060008060a0878903121561247157600080fd5b863561247c816121e9565b9550602087013561248c816121e9565b945060408701359350606087013567ffffffffffffffff8111156124af57600080fd5b6124bb89828a016121fe565b909450925050608087013567ffffffffffffffff8111156124db57600080fd5b87016080818a0312156124ed57600080fd5b809150509295509295509295565b60005b838110156125165781810151838201526020016124fe565b50506000910152565b602081526000825180602084015261253e8160408501602087016124fb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008060006060848603121561258557600080fd5b8335612590816121e9565b925060208401356125a0816121e9565b915060408401356125b0816121e9565b809150509250925092565b6000806000606084860312156125d057600080fd5b83356125db816121e9565b925060208401356125eb816121e9565b929592945050506040919091013590565b6000806000806000806080878903121561261557600080fd5b863567ffffffffffffffff81111561262c57600080fd5b61263889828a016121fe565b909750955050602087013561264c816121e9565b935060408701359250606087013567ffffffffffffffff81111561266f57600080fd5b61267b89828a016121fe565b979a9699509497509295939492505050565b801515811461099957600080fd5b6000602082840312156126ad57600080fd5b8135611edd8161268d565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b03851660208201528360408201526080606082015260006127396080830184866126b8565b979650505050505050565b838152604060208201526000611ff96040830184866126b8565b6000813561276b816121e9565b6001600160a01b031683526020820135612784816121e9565b6001600160a01b03166020840152604082810135908401526060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126127d257600080fd5b820160208101903567ffffffffffffffff8111156127ef57600080fd5b8036038213156127fe57600080fd5b60806060860152611ff96080860182846126b8565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061284b60a0830185876126b8565b828103608084015261285d818561275e565b9998505050505050505050565b8481526060602082015260006128846060830185876126b8565b8281036040840152612739818561275e565b6000602082840312156128a857600080fd5b5051919050565b8181038181111561071d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006128fd6060830187896126b8565b85602084015282810360408401526129168185876126b8565b98975050505050505050565b60006020828403121561293457600080fd5b8151611edd8161268d565b600082516129518184602087016124fb565b919091019291505056fea264697066735822122032725bd2b7dce3e2ae6a3b0195af5832fc237f7d832025eeb8bb10b9c42be63964736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WHITELISTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setSupportsLegacy\",\"inputs\":[{\"name\":\"_supportsLegacy\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"supportsLegacy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unwhitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"whitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelisted\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"messageContext\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedCustodyTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyMethodsNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a060405230608052348015601357600080fd5b5060805161296f61003d600039600081816117b1015281816117da01526119b2015261296f6000f3fe6080604052600436106101c25760003560e01c806391d14854116100f7578063ad3cb1cc11610095578063d9caed1211610064578063d9caed12146105f6578063e609055e14610616578063e63ab1e914610636578063eab103df1461066a57600080fd5b8063ad3cb1cc14610530578063c0c53b8b14610586578063d547741f146105a6578063d936547e146105c657600080fd5b80639a590427116100d15780639a590427146104bb5780639b19251a146104db578063a217fddf146104fb578063ad0818521461051057600080fd5b806391d1485414610416578063950837aa1461047b57806399a3c3561461049b57600080fd5b80634f1ef286116101645780635b1125911161013e5780635b112591146103765780635c975abb146103965780638456cb59146103cd57806385f438c1146103e257600080fd5b80634f1ef2861461031a57806352d1902d1461032d578063570618e11461034257600080fd5b8063252f07bf116101a0578063252f07bf146102915780632f2ff15d146102c357806336568abe146102e55780633f4ba83a1461030557600080fd5b806301ffc9a7146101c7578063116191b6146101fc578063248a9ca314610234575b600080fd5b3480156101d357600080fd5b506101e76101e2366004612170565b61068a565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b5060005461021c906001600160a01b031681565b6040516001600160a01b0390911681526020016101f3565b34801561024057600080fd5b5061028361024f3660046121b2565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101f3565b34801561029d57600080fd5b506002546101e79074010000000000000000000000000000000000000000900460ff1681565b3480156102cf57600080fd5b506102e36102de3660046121e0565b610723565b005b3480156102f157600080fd5b506102e36103003660046121e0565b61076d565b34801561031157600080fd5b506102e36107be565b6102e361032836600461223f565b6107f3565b34801561033957600080fd5b50610283610812565b34801561034e57600080fd5b506102837f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b34801561038257600080fd5b5060025461021c906001600160a01b031681565b3480156103a257600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101e7565b3480156103d957600080fd5b506102e3610841565b3480156103ee57600080fd5b506102837f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561042257600080fd5b506101e76104313660046121e0565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561048757600080fd5b506102e3610496366004612348565b610873565b3480156104a757600080fd5b506102e36104b63660046123ae565b610a06565b3480156104c757600080fd5b506102e36104d6366004612348565b610bb4565b3480156104e757600080fd5b506102e36104f6366004612348565b610c68565b34801561050757600080fd5b50610283600081565b34801561051c57600080fd5b506102e361052b366004612451565b610d22565b34801561053c57600080fd5b506105796040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101f39190612500565b34801561059257600080fd5b506102e36105a1366004612551565b610e94565b3480156105b257600080fd5b506102e36105c13660046121e0565b6111b9565b3480156105d257600080fd5b506101e76105e1366004612348565b60016020526000908152604090205460ff1681565b34801561060257600080fd5b506102e361061136600461259c565b6111fd565b34801561062257600080fd5b506102e36106313660046125dd565b611314565b34801561064257600080fd5b506102837f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561067657600080fd5b506102e361068536600461265e565b61155f565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061071d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461075d816115b5565b61076783836115bf565b50505050565b6001600160a01b03811633146107af576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b9828261168e565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107e8816115b5565b6107f0611734565b50565b6107fb6117a6565b61080482611878565b61080e8282611883565b5050565b600061081c6119a7565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61086b816115b5565b6107f0611a09565b600061087e816115b5565b6001600160a01b0382166108be576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546108f5907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b031661168e565b5060025461092d907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b031661168e565b506109587f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836115bf565b506109837f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a836115bf565b50600254604080516001600160a01b03928316815291841660208301527f4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b610a0e611a64565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a38816115b5565b610a40611ae5565b6001600160a01b03861660009081526001602052604090205460ff16610a92576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610aac906001600160a01b03888116911687611b41565b6000546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063aa0c0fc190610aff9089908b908a908a908a908a90600401612779565b600060405180830381600087803b158015610b1957600080fd5b505af1158015610b2d573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f7b53ec10a80164e60591c43d9c222e9354886981b880a3fba19c9ceb77fb972187878787604051610b7a94939291906127d0565b60405180910390a350610bac60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610bde816115b5565b6001600160a01b038216610c1e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260016020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610c92816115b5565b6001600160a01b038216610cd2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000818152600160208190526040808320805460ff1916909217909155517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b610d2a611a64565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d54816115b5565b610d5c611ae5565b6001600160a01b03851660009081526001602052604090205460ff16610dae576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610dc8906001600160a01b03878116911686611b41565b6000546040517f7bbe9afa0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690637bbe9afa90610e1b908a9089908b908a908a908a90600401612807565b600060405180830381600087803b158015610e3557600080fd5b505af1158015610e49573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d5868686604051610b7a93929190612866565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610edf5750825b905060008267ffffffffffffffff166001148015610efc5750303b155b905081158015610f0a575080155b15610f41576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610fa25784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0388161580610fbf57506001600160a01b038716155b80610fd157506001600160a01b038616155b15611008576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611010611bdb565b611018611be3565b611020611bdb565b611028611bf3565b600080546001600160a01b03808b167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617835560028054918b169190921617905561107690876115bf565b506110a17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876115bf565b506110cc7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a886115bf565b506110f77f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4886115bf565b506111227f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a876115bf565b5061114d7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a886115bf565b5083156111af5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111f3816115b5565b610767838361168e565b611205611a64565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461122f816115b5565b611237611ae5565b6001600160a01b03831660009081526001602052604090205460ff16611289576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61129d6001600160a01b0384168584611b41565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb846040516112e291815260200190565b60405180910390a3506107b960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61131c611a64565b611324611ae5565b60025474010000000000000000000000000000000000000000900460ff16611378576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526001602052604090205460ff166113ca576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa15801561142a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144e9190612880565b90506114656001600160a01b038616333087611c03565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa1580156114ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115109190612880565b61151a9190612899565b878760405161152d9594939291906128d3565b60405180910390a250610bac60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b600061156a816115b5565b506002805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6107f08133611c3c565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611684576000848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561163a3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061071d565b600091505061071d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611684576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061071d565b61173c611cc9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061183f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166118337f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611876576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600061080e816115b5565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156118fb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526118f891810190612880565b60015b611941576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461199d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611938565b6107b98383611d24565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611876576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a11611ae5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611788565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611adf576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611876576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038381166024830152604482018390526107b991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611d7a565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611876611df6565b611beb611df6565b611876611e5d565b611bfb611df6565b611876611e65565b6040516001600160a01b0384811660248301528381166044830152606482018390526107679186918216906323b872dd90608401611b6e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff1661080e576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611938565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611876576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d2d82611e98565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611d72576107b98282611f40565b61080e611fb6565b6000611d8f6001600160a01b03841683611fee565b90508051600014158015611db4575080806020019051810190611db29190612900565b155b156107b9576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611938565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611876576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bb5611df6565b611e6d611df6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff19169055565b806001600160a01b03163b600003611ee7576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611938565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611f5d919061291d565b600060405180830381855af49150503d8060008114611f98576040519150601f19603f3d011682016040523d82523d6000602084013e611f9d565b606091505b5091509150611fad858383612003565b95945050505050565b3415611876576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611ffc83836000612078565b9392505050565b606082612018576120138261212e565b611ffc565b815115801561202f57506001600160a01b0384163b155b15612071576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611938565b5092915050565b6060814710156120b6576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611938565b600080856001600160a01b031684866040516120d2919061291d565b60006040518083038185875af1925050503d806000811461210f576040519150601f19603f3d011682016040523d82523d6000602084013e612114565b606091505b5091509150612124868383612003565b9695505050505050565b80511561213e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561218257600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611ffc57600080fd5b6000602082840312156121c457600080fd5b5035919050565b6001600160a01b03811681146107f057600080fd5b600080604083850312156121f357600080fd5b823591506020830135612205816121cb565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561225257600080fd5b823561225d816121cb565b9150602083013567ffffffffffffffff81111561227957600080fd5b8301601f8101851361228a57600080fd5b803567ffffffffffffffff8111156122a4576122a4612210565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561231057612310612210565b60405281815282820160200187101561232857600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561235a57600080fd5b8135611ffc816121cb565b60008083601f84011261237757600080fd5b50813567ffffffffffffffff81111561238f57600080fd5b6020830191508360208285010111156123a757600080fd5b9250929050565b60008060008060008060a087890312156123c757600080fd5b86356123d2816121cb565b955060208701356123e2816121cb565b945060408701359350606087013567ffffffffffffffff81111561240557600080fd5b61241189828a01612365565b909450925050608087013567ffffffffffffffff81111561243157600080fd5b87016080818a03121561244357600080fd5b809150509295509295509295565b60008060008060008086880360a081121561246b57600080fd5b602081121561247957600080fd5b50869550602087013561248b816121cb565b9450604087013561249b816121cb565b935060608701359250608087013567ffffffffffffffff8111156124be57600080fd5b6124ca89828a01612365565b979a9699509497509295939492505050565b60005b838110156124f75781810151838201526020016124df565b50506000910152565b602081526000825180602084015261251f8160408501602087016124dc565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008060006060848603121561256657600080fd5b8335612571816121cb565b92506020840135612581816121cb565b91506040840135612591816121cb565b809150509250925092565b6000806000606084860312156125b157600080fd5b83356125bc816121cb565b925060208401356125cc816121cb565b929592945050506040919091013590565b600080600080600080608087890312156125f657600080fd5b863567ffffffffffffffff81111561260d57600080fd5b61261989828a01612365565b909750955050602087013561262d816121cb565b935060408701359250606087013567ffffffffffffffff8111156124be57600080fd5b80151581146107f057600080fd5b60006020828403121561267057600080fd5b8135611ffc81612650565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600081356126d1816121cb565b6001600160a01b0316835260208201356126ea816121cb565b6001600160a01b03166020840152604082810135908401526060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261273857600080fd5b820160208101903567ffffffffffffffff81111561275557600080fd5b80360382131561276457600080fd5b60806060860152611fad60808601828461267b565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006127b160a08301858761267b565b82810360808401526127c381856126c4565b9998505050505050505050565b8481526060602082015260006127ea60608301858761267b565b82810360408401526127fc81856126c4565b979650505050505050565b60008735612814816121cb565b6001600160a01b0381168352506001600160a01b03871660208301526001600160a01b038616604083015284606083015260a0608083015261285a60a08301848661267b565b98975050505050505050565b838152604060208201526000611fad60408301848661267b565b60006020828403121561289257600080fd5b5051919050565b8181038181111561071d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006128e760608301878961267b565b856020840152828103604084015261285a81858761267b565b60006020828403121561291257600080fd5b8151611ffc81612650565b6000825161292f8184602087016124dc565b919091019291505056fea26469706673582212208abe4f70f408993f64a70015649b265cc33bcd2b707bc7e97b3c922cedec5ae764736f6c634300081a0033", } // ERC20CustodyABI is the input ABI used to generate the binding from. @@ -917,25 +922,25 @@ func (_ERC20Custody *ERC20CustodyTransactorSession) Withdraw(to common.Address, return _ERC20Custody.Contract.Withdraw(&_ERC20Custody.TransactOpts, to, token, amount) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x21fc65f2. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0xad081852. // -// Solidity: function withdrawAndCall(address to, address token, uint256 amount, bytes data) returns() -func (_ERC20Custody *ERC20CustodyTransactor) WithdrawAndCall(opts *bind.TransactOpts, to common.Address, token common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _ERC20Custody.contract.Transact(opts, "withdrawAndCall", to, token, amount, data) +// Solidity: function withdrawAndCall((address) messageContext, address to, address token, uint256 amount, bytes data) returns() +func (_ERC20Custody *ERC20CustodyTransactor) WithdrawAndCall(opts *bind.TransactOpts, messageContext MessageContext, to common.Address, token common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Custody.contract.Transact(opts, "withdrawAndCall", messageContext, to, token, amount, data) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x21fc65f2. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0xad081852. // -// Solidity: function withdrawAndCall(address to, address token, uint256 amount, bytes data) returns() -func (_ERC20Custody *ERC20CustodySession) WithdrawAndCall(to common.Address, token common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _ERC20Custody.Contract.WithdrawAndCall(&_ERC20Custody.TransactOpts, to, token, amount, data) +// Solidity: function withdrawAndCall((address) messageContext, address to, address token, uint256 amount, bytes data) returns() +func (_ERC20Custody *ERC20CustodySession) WithdrawAndCall(messageContext MessageContext, to common.Address, token common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Custody.Contract.WithdrawAndCall(&_ERC20Custody.TransactOpts, messageContext, to, token, amount, data) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x21fc65f2. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0xad081852. // -// Solidity: function withdrawAndCall(address to, address token, uint256 amount, bytes data) returns() -func (_ERC20Custody *ERC20CustodyTransactorSession) WithdrawAndCall(to common.Address, token common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _ERC20Custody.Contract.WithdrawAndCall(&_ERC20Custody.TransactOpts, to, token, amount, data) +// Solidity: function withdrawAndCall((address) messageContext, address to, address token, uint256 amount, bytes data) returns() +func (_ERC20Custody *ERC20CustodyTransactorSession) WithdrawAndCall(messageContext MessageContext, to common.Address, token common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20Custody.Contract.WithdrawAndCall(&_ERC20Custody.TransactOpts, messageContext, to, token, amount, data) } // WithdrawAndRevert is a paid mutator transaction binding the contract method 0x99a3c356. diff --git a/v2/pkg/erc20custody.t.sol/erc20custodytest.go b/v2/pkg/erc20custody.t.sol/erc20custodytest.go index 43e91485..b196fb5e 100644 --- a/v2/pkg/erc20custody.t.sol/erc20custodytest.go +++ b/v2/pkg/erc20custody.t.sol/erc20custodytest.go @@ -66,8 +66,8 @@ type StdInvariantFuzzSelector struct { // ERC20CustodyTestMetaData contains all meta data concerning the ERC20CustodyTest contract. var ERC20CustodyTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WHITELISTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testDepositLegacy\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositLegacyFailsIfNotSupported\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositLegacyFailsIfTokenNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgrade\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfSenderIsNotTSSUpdater\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUnwhitelist\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUnwhitelistFailsIfSenderIsNotWhitelister\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUnwhitelistFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpgradeAndWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWhitelist\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWhitelistFailsIfSenderIsNotWhitelister\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWhitelistFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedOnCall\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedCustodyTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyMethodsNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061f9ad8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106103365760003560e01c806385f438c1116101b2578063b5508aa9116100f9578063eb1ce7f9116100a2578063fa2a70741161007c578063fa2a7074146105b0578063fa7626d4146105b8578063fb176c12146105c5578063fe8e5f1b146105cd57600080fd5b8063eb1ce7f914610598578063f0c8e7e0146105a0578063f4221f08146105a857600080fd5b8063cbd57e2f116100d3578063cbd57e2f14610561578063e20c9f7114610569578063e63ab1e91461057157600080fd5b8063b5508aa914610539578063ba414fa614610541578063c713f8271461055957600080fd5b8063a3f9d0e01161015b578063af298bb111610135578063af298bb114610521578063b0464fdc14610529578063b421ca701461053157600080fd5b8063a3f9d0e0146104ea578063a4943deb146104f2578063a783c789146104fa57600080fd5b80639918c1c21161018c5780639918c1c2146104d25780639fc7fd55146104da578063a217fddf146104e257600080fd5b806385f438c11461048e5780639158c623146104b5578063916a17c6146104bd57600080fd5b806349c783dd1161028157806366d9a9a01161022a57806371149c941161020457806371149c94146104615780637e91c50f1461046957806382c529921461047157806385226c811461047957600080fd5b806366d9a9a01461043c5780636a621854146104515780637099d6f81461045957600080fd5b806352ff59391161025b57806352ff5939146103d8578063570618e1146103e05780635d62c8601461041557600080fd5b806349c783dd146103c05780634df42da1146103c857806351ecdf3c146103d057600080fd5b80632ade3880116102e35780633e73ecb4116102bd5780633e73ecb4146103a85780633ee92923146103b05780633f7286f4146103b857600080fd5b80632ade3880146103835780632be6a162146103985780633e5e3c23146103a057600080fd5b80631779672f116103145780631779672f146103555780631ed7831c1461035d578063284cb9291461037b57600080fd5b8063070f2ad01461033b5780630a9254e4146103455780630eee72a91461034d575b600080fd5b6103436105d5565b005b6103436107c1565b610343611248565b6103436114c5565b610365611603565b604051610372919061c44e565b60405180910390f35b610343611665565b61038b611946565b604051610372919061c4ea565b610343611a88565b610365611c34565b610343611c94565b6103436121e7565b6103656122a3565b610343612303565b610343612640565b610343612798565b610343612956565b6104077f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b604051908152602001610372565b6104077f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b610444613186565b604051610372919061c650565b6103436132f3565b6103436133ac565b61034361365a565b610343613e67565b610343613ff2565b610481614264565b604051610372919061c6ee565b6104077f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610343614334565b6104c5614402565b604051610372919061c765565b6103436144e8565b6103436147cc565b610407600081565b61034361489a565b610343614e79565b6104077f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b61034361508c565b6104c5615630565b610343615716565b610481615bdc565b610549615cac565b6040519015158152602001610372565b610343615d80565b6103436169d1565b610365616a6f565b6104077f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b610343616acf565b610343616bdb565b610343616d87565b610343616fde565b601f546105499060ff1681565b6103436172bf565b610343617916565b6027546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561064757600080fd5b505af115801561065b573d6000803e3d6000fd5b5050602754604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250610712919060040161c7fc565b600060405180830381600087803b15801561072c57600080fd5b505af1158015610740573d6000803e3d6000fd5b50506021546025546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063950837aa91506024015b600060405180830381600087803b1580156107a757600080fd5b505af11580156107bb573d6000803e3d6000fd5b50505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805482166156781790556028805490911661987617905560405161081f9061c37b565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156108a4573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516108e99061c37b565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561096d573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260275460255492519086169481019490945260448401929092529092166064820152600091610a4c916084015b60408051601f198184030181529190526020810180516001600160e01b03167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052617aef565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0384811682029290921792839055604080518082018252601081527f4552433230437573746f64792e736f6c0000000000000000000000000000000060208201526027546025549251939095048416602484015293831660448301529091166064820152919250610aef91608401610a04565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691909117909155604080518082018252601a81527f5a657461436f6e6e6563746f724e6f6e4e61746976652e736f6c0000000000006020820152601f546024805460275460255495516101009094048716928401929092528516604483015284166064820152919092166084820152919250610be19160a40160408051601f198184030181529190526020810180516001600160e01b03167ff8c8765e00000000000000000000000000000000000000000000000000000000179052617aef565b602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316179055604051909150610c239061c388565b604051809103906000f080158015610c3f573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610ceb57600080fd5b505af1158015610cff573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610d7557600080fd5b505af1158015610d89573d6000803e3d6000fd5b5050601f546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f9150602401600060405180830381600087803b158015610df457600080fd5b505af1158015610e08573d6000803e3d6000fd5b5050601f546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef9150602401600060405180830381600087803b158015610e7357600080fd5b505af1158015610e87573d6000803e3d6000fd5b50506021546023546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401600060405180830381600087803b158015610eed57600080fd5b505af1158015610f01573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f6357600080fd5b505af1158015610f77573d6000803e3d6000fd5b50506023546025546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b158015610fe657600080fd5b505af1158015610ffa573d6000803e3d6000fd5b5050602480546025546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b15801561106b57600080fd5b505af115801561107f573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af11580156110f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611117919061c80f565b506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561119857600080fd5b505af11580156111ac573d6000803e3d6000fd5b5050604080516080810182526025546001600160a01b039081168252602354811660208084019182526001848601908152855191820190955260008152606084018190528351602980549185167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161781559251602a8054919095169116179092559251602b55909350909150602c906107bb908261c8f4565b602354602654604051620186a0602482018190526001600160a01b03938416604483015292909116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167fc513169100000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b15801561131a57600080fd5b505af115801561132e573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611404919060040161c7fc565b600060405180830381600087803b15801561141e57600080fd5b505af1158015611432573d6000803e3d6000fd5b50506021546020546023546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f2945061148f9392831692909116908790879060040161c9b3565b600060405180830381600087803b1580156114a957600080fd5b505af11580156114bd573d6000803e3d6000fd5b505050505050565b6023546026546040516000602482018190526001600160a01b039384166044830152929091166064820152819060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602754905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b15801561159457600080fd5b505af11580156115a8573d6000803e3d6000fd5b5050604051630618f58760e51b81527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401611404565b6060601680548060200260200160405190810160405280929190818152602001828054801561165b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161163d575b5050505050905090565b602154602480546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600093919091169163d936547e9101602060405180830381865afa1580156116ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f2919061c80f565b90506116ff600082617b0e565b6021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561177457600080fd5b505af1158015611788573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549150600090a260255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561181d57600080fd5b505af1158015611831573d6000803e3d6000fd5b5050602154602480546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639b19251a925001600060405180830381600087803b15801561189657600080fd5b505af11580156118aa573d6000803e3d6000fd5b5050602154602480546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529216935063d936547e925001602060405180830381865afa158015611912573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611936919061c80f565b9050611943600182617b0e565b50565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015611a7f57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611a685783829060005260206000200180546119db9061c860565b80601f0160208091040260200160405190810160405280929190818152602001828054611a079061c860565b8015611a545780601f10611a2957610100808354040283529160200191611a54565b820191906000526020600020905b815481529060010190602001808311611a3757829003601f168201915b5050505050815260200190600101906119bc565b50505050815250508152602001906001019061196a565b50505050905090565b60405163ca669fa760e01b81526101236004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611ad657600080fd5b505af1158015611aea573d6000803e3d6000fd5b50506040805161012360248201527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60448083019190915282518083039091018152606490910182526020810180516001600160e01b03167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611bb6919060040161c7fc565b600060405180830381600087803b158015611bd057600080fd5b505af1158015611be4573d6000803e3d6000fd5b5050602154602480546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639b19251a92500161078d565b6060601880548060200260200160405190810160405280929190818152602001828054801561165b576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161163d575050505050905090565b6023546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa158015611ce7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0b919061c9ea565b9050611d18816000617b90565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8d919061c9ea565b602654604080516001600160a01b039283166024820152604480820188905282518083039091018152606490910182526020810180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611e4c92911690600090869060040161ca03565b600060405180830381600087803b158015611e6657600080fd5b505af1158015611e7a573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611ef357600080fd5b505af1158015611f07573d6000803e3d6000fd5b50506023546026546040518881526001600160a01b039283169450911691507fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb9060200160405180910390a360275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611fac57600080fd5b505af1158015611fc0573d6000803e3d6000fd5b50506021546026546023546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152604481018990529116925063d9caed129150606401600060405180830381600087803b15801561203857600080fd5b505af115801561204c573d6000803e3d6000fd5b50506023546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561209f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c3919061c9ea565b90506120cf8186617b90565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612120573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612144919061c9ea565b905061215981612154888761ca5a565b617b90565b602354601f546040516370a0823160e01b81526101009091046001600160a01b03908116600483015260009216906370a0823190602401602060405180830381865afa1580156121ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d1919061c9ea565b90506121de816000617b90565b50505050505050565b602354602654604051620186a0602482018190526001600160a01b03938416604483015292909116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401611300565b6060601780548060200260200160405190810160405280929190818152602001828054801561165b576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161163d575050505050905090565b6021546040517feab103df000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039091169063eab103df90602401600060405180830381600087803b15801561236257600080fd5b505af1158015612376573d6000803e3d6000fd5b50506023546021546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af11580156123ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240e919061c80f565b50602480546021546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424093810193909352169063095ea7b3906044016020604051808303816000875af1158015612481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a5919061c80f565b50604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025820192839052630618f58760e51b9092527f73cba663000000000000000000000000000000000000000000000000000000006029820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906049015b600060405180830381600087803b15801561254d57600080fd5b505af1158015612561573d6000803e3d6000fd5b505060215460265460405160609190911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208201526001600160a01b03909116925063e609055e915060340160408051601f19818403018152908290526023547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261260b926001600160a01b03909116906103e890879060040161ca6d565b600060405180830381600087803b15801561262557600080fd5b505af1158015612639573d6000803e3d6000fd5b5050505050565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156126b257600080fd5b505af11580156126c6573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561273657600080fd5b505af115801561274a573d6000803e3d6000fd5b50506021546040517f950837aa000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063950837aa915060240161078d565b6023546026546040516001602482018190526001600160a01b03938416604483015292909116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602754905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561286757600080fd5b505af115801561287b573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156128eb57600080fd5b505af11580156128ff573d6000803e3d6000fd5b50506021546023546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506321fc65f2935061148f9260009216908790879060040161c9b3565b6021546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4600482015261432160248201819052916000916001600160a01b03909116906391d1485490604401602060405180830381865afa1580156129e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a09919061c80f565b9050612a1481617be8565b6021546040517f91d148540000000000000000000000000000000000000000000000000000000081527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60048201526001600160a01b03848116602483015260009216906391d1485490604401602060405180830381865afa158015612a9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac2919061c80f565b9050612acd81617be8565b6021546027546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b03918216602482015260009291909116906391d1485490604401602060405180830381865afa158015612b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b81919061c80f565b9050612b8c81617c62565b6021546027546040517f91d148540000000000000000000000000000000000000000000000000000000081527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60048201526001600160a01b03918216602482015260009291909116906391d1485490604401602060405180830381865afa158015612c1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c40919061c80f565b9050612c4b81617c62565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015612cbd57600080fd5b505af1158015612cd1573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612d4a57600080fd5b505af1158015612d5e573d6000803e3d6000fd5b5050602754604080516001600160a01b03928316815291891660208301527f4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6935001905060405180910390a16021546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b0387811660048301529091169063950837aa90602401600060405180830381600087803b158015612e0a57600080fd5b505af1158015612e1e573d6000803e3d6000fd5b50505050612ea285602160009054906101000a90046001600160a01b03166001600160a01b0316635b1125916040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e9d919061caa7565b617cb4565b6021546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b038781166024830152909116906391d1485490604401602060405180830381865afa158015612f2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4f919061c80f565b9350612f5a84617c62565b6021546040517f91d148540000000000000000000000000000000000000000000000000000000081527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60048201526001600160a01b038781166024830152909116906391d1485490604401602060405180830381865afa158015612fe3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613007919061c80f565b925061301283617c62565b6021546027546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b0391821660248201529116906391d1485490604401602060405180830381865afa15801561309d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130c1919061c80f565b91506130cc82617be8565b6021546027546040517f91d148540000000000000000000000000000000000000000000000000000000081527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60048201526001600160a01b0391821660248201529116906391d1485490604401602060405180830381865afa158015613157573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317b919061c80f565b905061263981617be8565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611a7f57838290600052602060002090600202016040518060400160405290816000820180546131dd9061c860565b80601f01602080910402602001604051908101604052809291908181526020018280546132099061c860565b80156132565780601f1061322b57610100808354040283529160200191613256565b820191906000526020600020905b81548152906001019060200180831161323957829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156132db57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b0319168152602001906004019060208260030104928301926001038202915080841161329d5790505b505050505081525050815260200190600101906131aa565b6023546026546040516000602482018190526001600160a01b039384166044830152929091166064820152819060840160408051601f198184030181529181526020820180516001600160e01b03167fc513169100000000000000000000000000000000000000000000000000000000179052602754905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa79060240161157a565b6021546040517feab103df000000000000000000000000000000000000000000000000000000008152600160048201526001600160a01b039091169063eab103df90602401600060405180830381600087803b15801561340b57600080fd5b505af115801561341f573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b15801561348557600080fd5b505af1158015613499573d6000803e3d6000fd5b50506023546021546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af115801561350d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613531919061c80f565b50602480546021546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424093810193909352169063095ea7b3906044016020604051808303816000875af11580156135a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c8919061c80f565b50604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025820192839052630618f58760e51b9092527f584a7938000000000000000000000000000000000000000000000000000000006029820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090604901612533565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f19018152908290526023546020546370a0823160e01b84526001600160a01b0390811660048501529193506000929116906370a0823190602401602060405180830381865afa1580156136ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613712919061c9ea565b905061371f816000617b90565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015613770573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613794919061c9ea565b601f54604080516001600160a01b0361010090930483166024820152604480820189905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000006001600160e01b0390911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba39261385a92911690600090869060040161ca03565b600060405180830381600087803b15801561387457600080fd5b505af1158015613888573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561390157600080fd5b505af1158015613915573d6000803e3d6000fd5b505050507f689a5a5cb55e795ffe4cd8b419cd3bb0a3373974c54d25f64e734d7388b93e9b601f60019054906101000a90046001600160a01b0316602960405161396092919061cbad565b60405180910390a1601f546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156139e157600080fd5b505af11580156139f5573d6000803e3d6000fd5b50506023546020546040516001600160a01b039283169450911691507fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e03590613a43908990899060299061cbcf565b60405180910390a36021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613ac057600080fd5b505af1158015613ad4573d6000803e3d6000fd5b50506023546020546040516001600160a01b039283169450911691507f7b53ec10a80164e60591c43d9c222e9354886981b880a3fba19c9ceb77fb972190613b22908990899060299061cbcf565b60405180910390a360275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613b8357600080fd5b505af1158015613b97573d6000803e3d6000fd5b50506021546020546023546040517f99a3c3560000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506399a3c3569450613bf79392831692909116908a908a9060299060040161cbfa565b600060405180830381600087803b158015613c1157600080fd5b505af1158015613c25573d6000803e3d6000fd5b50506023546020546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015613c79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c9d919061c9ea565b9050613ca98187617b90565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015613cfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d1e919061c9ea565b9050613d2e81612154898761ca5a565b602354601f546020546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b0390811660048401529081166024830152600092169063dd62ed3e90604401602060405180830381865afa158015613da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dca919061c9ea565b9050613dd7816000617b90565b602354601f546040516370a0823160e01b81526101009091046001600160a01b03908116600483015260009216906370a0823190602401602060405180830381865afa158015613e2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e4f919061c9ea565b9050613e5c816000617b90565b505050505050505050565b6040517f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260019060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613f0057600080fd5b505af1158015613f14573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613f8457600080fd5b505af1158015613f98573d6000803e3d6000fd5b50506021546023546040517f99a3c3560000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506399a3c356935061148f9260009216908790879060299060040161cbfa565b6027546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561406457600080fd5b505af1158015614078573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b1580156140de57600080fd5b505af11580156140f2573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561416257600080fd5b505af1158015614176573d6000803e3d6000fd5b50506021546026546023546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152600160448201529116925063d9caed129150606401600060405180830381600087803b1580156141ee57600080fd5b505af1158015614202573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107a757600080fd5b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611a7f5783829060005260206000200180546142a79061c860565b80601f01602080910402602001604051908101604052809291908181526020018280546142d39061c860565b80156143205780601f106142f557610100808354040283529160200191614320565b820191906000526020600020905b81548152906001019060200180831161430357829003601f168201915b505050505081526020019060010190614288565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156143a057600080fd5b505af11580156143b4573d6000803e3d6000fd5b50506021546040517f9a590427000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039091169250639a590427915060240161078d565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015611a7f5760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156144d057602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116144925790505b50505050508152505081526020019060010190614426565b602354602654604051600160248201526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a20000000000000000000000000000000000000000000000000000000017905260275490517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156145cc57600080fd5b505af11580156145e0573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b15801561464657600080fd5b505af115801561465a573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156146ca57600080fd5b505af11580156146de573d6000803e3d6000fd5b50506021546020546023546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f2945061473c939283169290911690600190879060040161c9b3565b600060405180830381600087803b15801561475657600080fd5b505af115801561476a573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561262557600080fd5b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561483857600080fd5b505af115801561484c573d6000803e3d6000fd5b50506021546040517f9b19251a000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039091169250639b19251a915060240161078d565b604080516004808252602480830184526020830180516001600160e01b03167f6ed701690000000000000000000000000000000000000000000000000000000017905260235460265494516370a0823160e01b81526001600160a01b0395861693810193909352620186a0946000939116916370a082319101602060405180830381865afa158015614930573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614954919061c9ea565b9050614961816000617b90565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156149b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149d6919061c9ea565b601f54604080516001600160a01b0361010090930483166024820152604480820189905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000006001600160e01b0390911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392614a9c92911690600090869060040161ca03565b600060405180830381600087803b158015614ab657600080fd5b505af1158015614aca573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614b4357600080fd5b505af1158015614b57573d6000803e3d6000fd5b5050601f546040516101009091046001600160a01b031681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09250602001905060405180910390a16021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614c1557600080fd5b505af1158015614c29573d6000803e3d6000fd5b50506023546020546040516001600160a01b039283169450911691507f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d590614c74908990899061cc4f565b60405180910390a360275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614cd557600080fd5b505af1158015614ce9573d6000803e3d6000fd5b50506021546020546023546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f29450614d469392831692909116908a908a9060040161c9b3565b600060405180830381600087803b158015614d6057600080fd5b505af1158015614d74573d6000803e3d6000fd5b50506023546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614deb919061c9ea565b9050614df8816000617b90565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e6d919061c9ea565b9050613d2e8185617b90565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614f1457600080fd5b505af1158015614f28573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614ffe919060040161c7fc565b600060405180830381600087803b15801561501857600080fd5b505af115801561502c573d6000803e3d6000fd5b50506021546020546023546040517f99a3c3560000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506399a3c356945061148f9392831692909116908790879060299060040161cbfa565b602154604080518082018252601b81527f4552433230437573746f647955706772616465546573742e736f6c00000000006020808301919091528251908101909252600082526025546150ec936001600160a01b03908116939116617d15565b6021546023546026546040516370a0823160e01b81526001600160a01b03918216600482015292811692620186a09260009216906370a0823190602401602060405180830381865afa158015615146573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061516a919061c9ea565b9050615177816000617b90565b6023546040516370a0823160e01b81526001600160a01b03858116600483015260009216906370a0823190602401602060405180830381865afa1580156151c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151e6919061c9ea565b602654604080516001600160a01b039283166024820152604480820188905282518083039091018152606490910182526020810180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926152a592911690600090869060040161ca03565b600060405180830381600087803b1580156152bf57600080fd5b505af11580156152d3573d6000803e3d6000fd5b50506040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b0388166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561534857600080fd5b505af115801561535c573d6000803e3d6000fd5b50506023546026546040518881526001600160a01b039283169450911691507fd4dabfe72081670cc78f2ebda8e2eddaf3feebde6288dcb8fe673b3dc201b5a49060200160405180910390a360275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561540157600080fd5b505af1158015615415573d6000803e3d6000fd5b50506026546023546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216602482015260448101889052908816925063d9caed129150606401600060405180830381600087803b15801561548b57600080fd5b505af115801561549f573d6000803e3d6000fd5b50506023546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156154f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615516919061c9ea565b90506155228186617b90565b6023546040516370a0823160e01b81526001600160a01b03888116600483015260009216906370a0823190602401602060405180830381865afa15801561556d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615591919061c9ea565b90506155a181612154888761ca5a565b602354601f546040516370a0823160e01b81526101009091046001600160a01b03908116600483015260009216906370a0823190602401602060405180830381865afa1580156155f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615619919061c9ea565b9050615626816000617b90565b5050505050505050565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611a7f5760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156156fe57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116156c05790505b50505050508152505081526020019060010190615654565b6021546040517feab103df000000000000000000000000000000000000000000000000000000008152600160048201526103e8916001600160a01b03169063eab103df90602401600060405180830381600087803b15801561577757600080fd5b505af115801561578b573d6000803e3d6000fd5b50506023546021546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af11580156157ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615823919061c80f565b50602480546021546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424093810193909352169063095ea7b3906044016020604051808303816000875af1158015615896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906158ba919061c80f565b506023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561590c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615930919061c9ea565b90506000604051602001615967907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f19018152908290526021546381bad6f360e01b8352600160048401819052602484018190526044840181905260648401526001600160a01b031660848301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156159ea57600080fd5b505af11580156159fe573d6000803e3d6000fd5b505060235460265460405160609190911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208201526001600160a01b0390911692507f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae915060340160408051601f1981840301815290829052615a87918790869061cc68565b60405180910390a26021546026546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051808303601401815260348301918290526023547fe609055e000000000000000000000000000000000000000000000000000000009092526001600160a01b039384169363e609055e93615b269391909116908890879060380161ca6d565b600060405180830381600087803b158015615b4057600080fd5b505af1158015615b54573d6000803e3d6000fd5b50505050615bd78383615b67919061cc93565b6023546021546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa158015615bb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612154919061c9ea565b505050565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611a7f578382906000526020600020018054615c1f9061c860565b80601f0160208091040260200160405190810160405280929190818152602001828054615c4b9061c860565b8015615c985780601f10615c6d57610100808354040283529160200191615c98565b820191906000526020600020905b815481529060010190602001808311615c7b57829003601f168201915b505050505081526020019060010190615c00565b60085460009060ff1615615cc4575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015615d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615d79919061c9ea565b1415905090565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615dd957600080fd5b505af1158015615ded573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250615ec3919060040161c7fc565b600060405180830381600087803b158015615edd57600080fd5b505af1158015615ef1573d6000803e3d6000fd5b50505050602160009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015615f4557600080fd5b505af1158015615f59573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015615fb657600080fd5b505af1158015615fca573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506160a0919060040161c7fc565b600060405180830381600087803b1580156160ba57600080fd5b505af11580156160ce573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561612257600080fd5b505af1158015616136573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561619357600080fd5b505af11580156161a7573d6000803e3d6000fd5b50505050602160009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156161fb57600080fd5b505af115801561620f573d6000803e3d6000fd5b5050602354602654604051620186a0602482018190526001600160a01b0393841660448301529290911660648201529092506000915060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a20000000000000000000000000000000000000000000000000000000017905251630618f58760e51b81527fd93c0665000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156162f857600080fd5b505af115801561630c573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561636957600080fd5b505af115801561637d573d6000803e3d6000fd5b50506021546020546023546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506163da9392831692909116908790879060040161c9b3565b600060405180830381600087803b1580156163f457600080fd5b505af1158015616408573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561646557600080fd5b505af1158015616479573d6000803e3d6000fd5b50505050602160009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156164cd57600080fd5b505af11580156164e1573d6000803e3d6000fd5b50506023546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015616535573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616559919061c9ea565b9050616566816000617b90565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156165b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906165db919061c9ea565b601f54604080516001600160a01b0361010090930483166024820152604480820189905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000006001600160e01b0390911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926166a192911690600090869060040161ca03565b600060405180830381600087803b1580156166bb57600080fd5b505af11580156166cf573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561674857600080fd5b505af115801561675c573d6000803e3d6000fd5b5050601f54602354602654604080516101009094046001600160a01b039081168552602085018c9052928316908401521660608201527f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609250608001905060405180910390a16021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561683757600080fd5b505af115801561684b573d6000803e3d6000fd5b50506023546020546040516001600160a01b039283169450911691507f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d590616896908990899061cc4f565b60405180910390a360275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156168f757600080fd5b505af115801561690b573d6000803e3d6000fd5b50506021546020546023546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506169689392831692909116908a908a9060040161c9b3565b600060405180830381600087803b15801561698257600080fd5b505af1158015616996573d6000803e3d6000fd5b50506023546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401613c5c565b60235460265460408051620186a060248083018290526001600160a01b039586166044840181905295909416606480840182905284518085039091018152608490930184526020830180516001600160e01b03167f357fc5a20000000000000000000000000000000000000000000000000000000017905292516370a0823160e01b815260048101939093529390926000926370a082319101616518565b6060601580548060200260200160405190810160405280929190818152602001828054801561165b576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161163d575050505050905090565b600080604051602001616b05907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015616b6c57600080fd5b505af1158015616b80573d6000803e3d6000fd5b5050604051630618f58760e51b81527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401614ffe565b60405163ca669fa760e01b81526101236004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015616c2957600080fd5b505af1158015616c3d573d6000803e3d6000fd5b50506040805161012360248201527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60448083019190915282518083039091018152606490910182526020810180516001600160e01b03167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250616d09919060040161c7fc565b600060405180830381600087803b158015616d2357600080fd5b505af1158015616d37573d6000803e3d6000fd5b5050602154602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a59042792500161078d565b602354602654604051600160248201526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a20000000000000000000000000000000000000000000000000000000017905260275490517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015616e6b57600080fd5b505af1158015616e7f573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b158015616ee557600080fd5b505af1158015616ef9573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015616f6957600080fd5b505af1158015616f7d573d6000803e3d6000fd5b50506021546020546023546040517f99a3c3560000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506399a3c356945061473c939283169290911690600190879060299060040161cbfa565b6021546023546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600092919091169063d936547e90602401602060405180830381865afa158015617048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061706c919061c80f565b9050617079600182617b0e565b6021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156170ee57600080fd5b505af1158015617102573d6000803e3d6000fd5b50506023546040516001600160a01b0390911692507f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919150600090a260255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561719757600080fd5b505af11580156171ab573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b15801561721157600080fd5b505af1158015617225573d6000803e3d6000fd5b50506021546023546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063d936547e9150602401602060405180830381865afa15801561728e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906172b2919061c80f565b9050611943600082617b0e565b602354602654604051620186a0602482018190526001600160a01b03938416604483015292909116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167fc51316910000000000000000000000000000000000000000000000000000000017905260235460265491516370a0823160e01b81526001600160a01b0392831660048201529293506000929116906370a0823190602401602060405180830381865afa158015617386573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906173aa919061c9ea565b90506173b7816000617b90565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015617408573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061742c919061c9ea565b601f54604080516001600160a01b0361010090930483166024820152604480820189905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000006001600160e01b0390911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926174f292911690600090869060040161ca03565b600060405180830381600087803b15801561750c57600080fd5b505af1158015617520573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561759957600080fd5b505af11580156175ad573d6000803e3d6000fd5b5050601f547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af60925061010090046001600160a01b031690506175f060028861cca6565b602354602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561769f57600080fd5b505af11580156176b3573d6000803e3d6000fd5b50506023546020546040516001600160a01b039283169450911691507f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d5906176fe908990899061cc4f565b60405180910390a360275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561775f57600080fd5b505af1158015617773573d6000803e3d6000fd5b50506021546020546023546040517f21fc65f20000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506321fc65f294506177d09392831692909116908a908a9060040161c9b3565b600060405180830381600087803b1580156177ea57600080fd5b505af11580156177fe573d6000803e3d6000fd5b50506023546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015617851573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190617875919061c9ea565b90506178868161215460028961cca6565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156178d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906178fb919061c9ea565b9050613d2e8161790c60028a61cca6565b612154908761ca5a565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561797457600080fd5b505af1158015617988573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250617a5e919060040161c7fc565b600060405180830381600087803b158015617a7857600080fd5b505af1158015617a8c573d6000803e3d6000fd5b50506021546026546023546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152604481018690529116925063d9caed12915060640161260b565b6000617af961c395565b617b04848483617d2a565b9150505b92915050565b6040517ff7fe347700000000000000000000000000000000000000000000000000000000815282151560048201528115156024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f7fe3477906044015b60006040518083038186803b158015617b7c57600080fd5b505afa1580156114bd573d6000803e3d6000fd5b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c5490604401617b64565b6040517fa59828850000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063a5982885906024015b60006040518083038186803b158015617c4e57600080fd5b505afa158015612639573d6000803e3d6000fd5b6040517f0c9fd5810000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90630c9fd58190602401617c36565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401617b64565b617d1d61c395565b6126398585858486617da5565b600080617d378584617ea5565b9050617d9a6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001617d8592919061cce1565b60405160208183030381529060405285617eb1565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015617e1757600080fd5b505af1925050508015617e28575060015b617e3d57617e3887878787617edf565b6121de565b617e4987878787617edf565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015617e8457600080fd5b505af1158015617e98573d6000803e3d6000fd5b5050505050505050505050565b6000617d9e8383617ef8565b60c08101515160009015617ed557617ece84848460c00151617f13565b9050617d9e565b617ece84846180b9565b6000617eeb84836181a4565b90506126398582856181b0565b6000617f04838361857a565b617d9e83836020015184617eb1565b600080617f1e61858a565b90506000617f2c868361865d565b90506000617f438260600151836020015185618b03565b90506000617f5383838989618d15565b90506000617f6082619b92565b602081015181519192509060030b15617fd357898260400151604051602001617f8a92919061cd03565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252617fca9160040161c7fc565b60405180910390fd5b60006180166040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001619d61565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061806990849060040161c7fc565b602060405180830381865afa158015618086573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906180aa919061caa7565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061810e90879060040161c7fc565b600060405180830381865afa15801561812b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618153919081019061ce3d565b90506000618181828560405160200161816d92919061ce72565b604051602081830303815290604052619f61565b90506001600160a01b038116617b04578484604051602001617f8a92919061cea1565b6000617f048383619f74565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa15801561824c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190618270919061c9ea565b90508061841757600061828286619f80565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061830d905b6040805180820182526000808252602091820152815180830190925284518252808501908201529061a063565b80618319575060008451115b1561839c576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef28690618365908890889060040161cce1565b600060405180830381600087803b15801561837f57600080fd5b505af1158015618393573d6000803e3d6000fd5b50505050618411565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b1580156183f857600080fd5b505af115801561840c573d6000803e3d6000fd5b505050505b50612639565b80600061842382619f80565b604080518082018252600581527f352e302e3000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618485906182e0565b80618491575060008551115b15618516576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d906184df908a908a908a9060040161cf4c565b600060405180830381600087803b1580156184f957600080fd5b505af115801561850d573d6000803e3d6000fd5b505050506121de565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b158015617e8457600080fd5b6185868282600061a077565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061861190849060040161cf7d565b600060405180830381865afa15801561862e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618656919081019061cfc4565b9250505090565b61868f6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506186da6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6186e38561a17a565b602082015260006186f38661a55f565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015618735573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261875d919081019061cfc4565b86838560200151604051602001618777949392919061d00d565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906187cf90859060040161c7fc565b600060405180830381865afa1580156187ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618814919081019061cfc4565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061885c90849060040161d111565b602060405180830381865afa158015618879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061889d919061c80f565b6188b25781604051602001617f8a919061d163565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906188f790849060040161d1f5565b600060405180830381865afa158015618914573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261893c919081019061cfc4565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061898390849060040161d247565b602060405180830381865afa1580156189a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906189c4919061c80f565b15618a59576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890618a0e90849060040161d247565b600060405180830381865afa158015618a2b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618a53919081019061cfc4565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001618a7e919061d299565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401618aaa92919061d305565b600060405180830381865afa158015618ac7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618aef919081019061cfc4565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081618b1f5790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110618b7f57618b7f61d32a565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110618bd357618bd361d32a565b602002602001018190525084604051602001618bef919061d359565b60405160208183030381529060405281600281518110618c1157618c1161d32a565b602002602001018190525082604051602001618c2d919061d3c5565b60405160208183030381529060405281600381518110618c4f57618c4f61d32a565b60200260200101819052506000618c6582619b92565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250618cf6906040805180820182526000808252602091820152815180830190925284518252808501908201529061a7e2565b618d0b5785604051602001617f8a919061d406565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015618d65565b511590565b618ed957826020015115618e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401617fca565b8260c0015115618ed9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401617fca565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081618ef257905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280618f4d9061d497565b935060ff1681518110618f6257618f6261d32a565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001618fb3919061d4b6565b604051602081830303815290604052828280618fce9061d497565b935060ff1681518110618fe357618fe361d32a565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806190309061d497565b935060ff16815181106190455761904561d32a565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806190929061d497565b935060ff16815181106190a7576190a761d32a565b602002602001018190525087602001518282806190c39061d497565b935060ff16815181106190d8576190d861d32a565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806191259061d497565b935060ff168151811061913a5761913a61d32a565b6020908102919091010152875182826191528161d497565b935060ff16815181106191675761916761d32a565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806191b49061d497565b935060ff16815181106191c9576191c961d32a565b60200260200101819052506191dd4661a843565b82826191e88161d497565b935060ff16815181106191fd576191fd61d32a565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061924a9061d497565b935060ff168151811061925f5761925f61d32a565b6020026020010181905250868282806192779061d497565b935060ff168151811061928c5761928c61d32a565b60209081029190910101528551156193b35760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826192dd8161d497565b935060ff16815181106192f2576192f261d32a565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061934290899060040161c7fc565b600060405180830381865afa15801561935f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052619387919081019061cfc4565b82826193928161d497565b935060ff16815181106193a7576193a761d32a565b60200260200101819052505b8460200151156194835760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826193fc8161d497565b935060ff16815181106194115761941161d32a565b60200260200101819052506040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525082828061945e9061d497565b935060ff16815181106194735761947361d32a565b602002602001018190525061964a565b6194bb618d608660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b61954e5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826194fe8161d497565b935060ff16815181106195135761951361d32a565b60200260200101819052508460a00151604051602001619533919061d359565b60405160208183030381529060405282828061945e9061d497565b8460c0015115801561959157506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261958f90511590565b155b1561964a5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826195d58161d497565b935060ff16815181106195ea576195ea61d32a565b60200260200101819052506195fe8861a8e3565b60405160200161960e919061d359565b6040516020818303038152906040528282806196299061d497565b935060ff168151811061963e5761963e61d32a565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261967e90511590565b6197135760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826196c18161d497565b935060ff16815181106196d6576196d661d32a565b602002602001018190525084604001518282806196f29061d497565b935060ff16815181106197075761970761d32a565b60200260200101819052505b6060850151156198345760408051808201909152600681527f2d2d73616c7400000000000000000000000000000000000000000000000000006020820152828261975c8161d497565b935060ff16815181106197715761977161d32a565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156197e0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052619808919081019061cfc4565b82826198138161d497565b935060ff16815181106198285761982861d32a565b60200260200101819052505b60e085015151156198db5760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261987e8161d497565b935060ff16815181106198935761989361d32a565b60200260200101819052506198af8560e001516000015161a843565b82826198ba8161d497565b935060ff16815181106198cf576198cf61d32a565b60200260200101819052505b60e085015160200151156199855760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826199288161d497565b935060ff168151811061993d5761993d61d32a565b60200260200101819052506199598560e001516020015161a843565b82826199648161d497565b935060ff16815181106199795761997961d32a565b60200260200101819052505b60e08501516040015115619a2f5760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826199d28161d497565b935060ff16815181106199e7576199e761d32a565b6020026020010181905250619a038560e001516040015161a843565b8282619a0e8161d497565b935060ff1681518110619a2357619a2361d32a565b60200260200101819052505b60e08501516060015115619ad95760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282619a7c8161d497565b935060ff1681518110619a9157619a9161d32a565b6020026020010181905250619aad8560e001516060015161a843565b8282619ab88161d497565b935060ff1681518110619acd57619acd61d32a565b60200260200101819052505b60008160ff1667ffffffffffffffff811115619af757619af761c831565b604051908082528060200260200182016040528015619b2a57816020015b6060815260200190600190039081619b155790505b50905060005b8260ff168160ff161015619b8357838160ff1681518110619b5357619b5361d32a565b6020026020010151828260ff1681518110619b7057619b7061d32a565b6020908102919091010152600101619b30565b5093505050505b949350505050565b619bb96040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91619c3f9186910161d521565b600060405180830381865afa158015619c5c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052619c84919081019061cfc4565b90506000619c92868361b3d2565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401619cc2919061c6ee565b6000604051808303816000875af1158015619ce1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052619d09919081019061d568565b805190915060030b15801590619d225750602081015151155b8015619d315750604081015151155b15618d0b5781600081518110619d4957619d4961d32a565b6020026020010151604051602001617f8a919061d61e565b60606000619d968560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150619dcd9082905b9061b527565b15619f2a576000619e4a82619e4484619e3e619e108a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061b54e565b9061b5b0565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150619eae90829061b527565b15619f1857604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152619f15905b829061b635565b90505b619f218161b65b565b92505050617d9e565b8215619f43578484604051602001617f8a92919061d80a565b5050604080516020810190915260008152617d9e565b509392505050565b6000808251602084016000f09392505050565b6185868282600161a077565b60408051600481526024810182526020810180516001600160e01b03167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691619fe0919061d8b1565b600060405180830381855afa9150503d806000811461a01b576040519150601f19603f3d011682016040523d82523d6000602084013e61a020565b606091505b509150915081801561a033575060208151115b1561a04c5780806020019051810190619b8a919061cfc4565b505060408051602081019091526000815292915050565b600061a06f838361b6c4565b159392505050565b8160a001511561a08657505050565b600061a09384848461b79f565b9050600061a0a082619b92565b602081015181519192509060030b15801561a13c5750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a13c90604080518082018252600080825260209182015281518083019092528451825280850190820152619dc7565b1561a14957505050505050565b6040820151511561a169578160400151604051602001617f8a919061d8cd565b80604051602001617f8a919061d92b565b6060600061a1af8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061a214905b829061a7e2565b1561a28357604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d9e9061a27e90839061bd3a565b61b65b565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a2e5905b829061bdc4565b60010361a3b257604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a34b90619f0e565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d9e9061a27e905b839061b635565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a4119061a20d565b1561a54857604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061a47990839061be5e565b90506000816001835161a48c919061ca5a565b8151811061a49c5761a49c61d32a565b6020026020010151905061a53f61a27e61a5126040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061bd3a565b95945050505050565b82604051602001617f8a919061d996565b50919050565b6060600061a5948360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061a5f69061a20d565b1561a60457617d9e8161b65b565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a6639061a2de565b60010361a6cd57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d9e9061a27e9061a3ab565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a72c9061a20d565b1561a54857604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061a79490839061be5e565b905060018151111561a7d057806002825161a7af919061ca5a565b8151811061a7bf5761a7bf61d32a565b602002602001015192505050919050565b5082604051602001617f8a919061d996565b80518251600091111561a7f757506000617b08565b8151835160208501516000929161a80d9161cc93565b61a817919061ca5a565b90508260200151810361a82e576001915050617b08565b82516020840151819020912014905092915050565b6060600061a8508361bf03565b600101905060008167ffffffffffffffff81111561a8705761a87061c831565b6040519080825280601f01601f19166020018201604052801561a89a576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461a8a457509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161a96f905b829061a063565b1561a9af57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261aa0e9061a968565b1561aa4e57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261aaad9061a968565b1561aaed57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261ab4c9061a968565b8061abb15750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261abb19061a968565b1561abf157505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261ac509061a968565b8061acb55750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261acb59061a968565b1561acf557505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261ad549061a968565b8061adb95750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261adb99061a968565b1561adf957505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261ae589061a968565b8061aebd5750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261aebd9061a968565b1561aefd57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261af5c9061a968565b1561af9c57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261affb9061a968565b1561b03b57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b09a9061a968565b1561b0da57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b1399061a968565b1561b17957505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b1d89061a968565b1561b21857505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b2779061a968565b8061b2dc5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b2dc9061a968565b1561b31c57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b37b9061a968565b1561b3bb57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151617f8a929060200161da74565b60608060005b845181101561b45d578185828151811061b3f45761b3f461d32a565b602002602001015160405160200161b40d92919061ce72565b60405160208183030381529060405291506001855161b42c919061ca5a565b811461b455578160405160200161b443919061dbdd565b60405160208183030381529060405291505b60010161b3d8565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161b476579050509050838160008151811061b4a15761b4a161d32a565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061b4f55761b4f561d32a565b6020026020010181905250818160028151811061b5145761b51461d32a565b6020908102919091010152949350505050565b602080830151835183519284015160009361b545929184919061bfe5565b14159392505050565b6040805180820190915260008082526020820152600061b580846000015185602001518560000151866020015161c0f6565b905083602001518161b592919061ca5a565b8451859061b5a190839061ca5a565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561b5d5575081617b08565b602080830151908401516001911461b5fc5750815160208481015190840151829020919020145b801561b62d5782518451859061b61390839061ca5a565b905250825160208501805161b62990839061cc93565b9052505b509192915050565b604080518082019091526000808252602082015261b65483838361c216565b5092915050565b60606000826000015167ffffffffffffffff81111561b67c5761b67c61c831565b6040519080825280601f01601f19166020018201604052801561b6a6576020820181803683370190505b509050600060208201905061b654818560200151866000015161c2c1565b815181516000919081111561b6d7575081515b6020808501519084015160005b8381101561b790578251825180821461b76057600019602087101561b73f5760018461b71189602061ca5a565b61b71b919061cc93565b61b72690600861dc1e565b61b73190600261dd1c565b61b73b919061ca5a565b1990505b818116838216818103911461b75d579750617b089650505050505050565b50505b61b76b60208661cc93565b945061b77860208561cc93565b9350505060208161b789919061cc93565b905061b6e4565b5084518651618d0b919061dd28565b6060600061b7ab61858a565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161b7c857905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061b8239061d497565b935060ff168151811061b8385761b83861d32a565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161b889919061dd48565b60405160208183030381529060405282828061b8a49061d497565b935060ff168151811061b8b95761b8b961d32a565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061b9069061d497565b935060ff168151811061b91b5761b91b61d32a565b60200260200101819052508260405160200161b937919061d3c5565b60405160208183030381529060405282828061b9529061d497565b935060ff168151811061b9675761b96761d32a565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061b9b49061d497565b935060ff168151811061b9c95761b9c961d32a565b602002602001018190525061b9de878461c33b565b828261b9e98161d497565b935060ff168151811061b9fe5761b9fe61d32a565b60209081029190910101528551511561baaa5760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261ba508161d497565b935060ff168151811061ba655761ba6561d32a565b602002602001018190525061ba7e86600001518461c33b565b828261ba898161d497565b935060ff168151811061ba9e5761ba9e61d32a565b60200260200101819052505b85608001511561bb185760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261baf38161d497565b935060ff168151811061bb085761bb0861d32a565b602002602001018190525061bb7e565b841561bb7e5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261bb5d8161d497565b935060ff168151811061bb725761bb7261d32a565b60200260200101819052505b6040860151511561bc1a5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261bbc88161d497565b935060ff168151811061bbdd5761bbdd61d32a565b6020026020010181905250856040015182828061bbf99061d497565b935060ff168151811061bc0e5761bc0e61d32a565b60200260200101819052505b85606001511561bc845760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261bc638161d497565b935060ff168151811061bc785761bc7861d32a565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561bca25761bca261c831565b60405190808252806020026020018201604052801561bcd557816020015b606081526020019060019003908161bcc05790505b50905060005b8260ff168160ff16101561bd2e57838160ff168151811061bcfe5761bcfe61d32a565b6020026020010151828260ff168151811061bd1b5761bd1b61d32a565b602090810291909101015260010161bcdb565b50979650505050505050565b604080518082019091526000808252602082015281518351101561bd5f575081617b08565b8151835160208501516000929161bd759161cc93565b61bd7f919061ca5a565b6020840151909150600190821461bda0575082516020840151819020908220145b801561bdbb5783518551869061bdb790839061ca5a565b9052505b50929392505050565b600080826000015161bde8856000015186602001518660000151876020015161c0f6565b61bdf2919061cc93565b90505b8351602085015161be06919061cc93565b811161b654578161be168161dd8d565b925050826000015161be4d85602001518361be31919061ca5a565b865161be3d919061ca5a565b838660000151876020015161c0f6565b61be57919061cc93565b905061bdf5565b6060600061be6c848461bdc4565b61be7790600161cc93565b67ffffffffffffffff81111561be8f5761be8f61c831565b60405190808252806020026020018201604052801561bec257816020015b606081526020019060019003908161bead5790505b50905060005b8151811015619f595761bede61a27e868661b635565b82828151811061bef05761bef061d32a565b602090810291909101015260010161bec8565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061bf4c577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061bf78576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061bf9657662386f26fc10000830492506010015b6305f5e100831061bfae576305f5e100830492506008015b612710831061bfc257612710830492506004015b6064831061bfd4576064830492506002015b600a8310617b085760010192915050565b60008085841161c0ec576020841161c098576000841561c03057600161c00c86602061ca5a565b61c01790600861dc1e565b61c02290600261dd1c565b61c02c919061ca5a565b1990505b835181168561c03f898961cc93565b61c049919061ca5a565b805190935082165b81811461c0835787841161c06b5787945050505050619b8a565b8361c0758161dda7565b94505082845116905061c051565b61c08d878561cc93565b945050505050619b8a565b83832061c0a5858861ca5a565b61c0af908761cc93565b91505b85821061c0ea5784822080820361c0d75761c0cd868461cc93565b9350505050619b8a565b61c0e260018461ca5a565b92505061c0b2565b505b5092949350505050565b6000838186851161c201576020851161c1b0576000851561c14257600161c11e87602061ca5a565b61c12990600861dc1e565b61c13490600261dd1c565b61c13e919061ca5a565b1990505b8451811660008761c1538b8b61cc93565b61c15d919061ca5a565b855190915083165b82811461c1a25781861061c18a5761c17d8b8b61cc93565b9650505050505050619b8a565b8561c1948161dd8d565b96505083865116905061c165565b859650505050505050619b8a565b508383206000905b61c1c2868961ca5a565b821161c1ff5785832080820361c1de5783945050505050619b8a565b61c1e960018561cc93565b935050818061c1f79061dd8d565b92505061c1b8565b505b61c20b878761cc93565b979650505050505050565b6040805180820190915260008082526020820152600061c248856000015186602001518660000151876020015161c0f6565b60208087018051918601919091525190915061c264908261ca5a565b83528451602086015161c277919061cc93565b810361c286576000855261c2b8565b8351835161c294919061cc93565b8551869061c2a390839061ca5a565b905250835161c2b2908261cc93565b60208601525b50909392505050565b6020811061c2f9578151835261c2d860208461cc93565b925061c2e560208361cc93565b915061c2f260208261ca5a565b905061c2c1565b600019811561c32857600161c30f83602061ca5a565b61c31b9061010061dd1c565b61c325919061ca5a565b90505b9151835183169219169190911790915250565b6060600061c349848461865d565b805160208083015160405193945061c3639390910161ddbe565b60405160208183030381529060405291505092915050565b610c9f8061de1783390190565b610ec28061eab683390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161c3d861c3dd565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161c3d86040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561c48f5783516001600160a01b031683526020938401939092019160010161c468565b509095945050505050565b60005b8381101561c4b557818101518382015260200161c49d565b50506000910152565b6000815180845261c4d681602086016020860161c49a565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561c5e6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561c5cc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261c5b684865161c4be565b602095860195909450929092019160010161c57c565b50919750505060209485019492909201915060010161c512565b50929695505050505050565b600081518084526020840193506020830160005b8281101561c6465781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161c606565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561c5e6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261c6bc604088018261c4be565b905060208201519150868103602088015261c6d7818361c5f2565b96505050602093840193919091019060010161c678565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561c5e6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261c75085835161c4be565b9450602093840193919091019060010161c716565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561c5e6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261c7e6604087018261c5f2565b955050602093840193919091019060010161c78d565b602081526000617d9e602083018461c4be565b60006020828403121561c82157600080fd5b81518015158114617d9e57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061c87457607f821691505b60208210810361a559577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115615bd757806000526020600020601f840160051c8101602085101561c8d45750805b601f840160051c820191505b81811015612639576000815560010161c8e0565b815167ffffffffffffffff81111561c90e5761c90e61c831565b61c9228161c91c845461c860565b8461c8ad565b6020601f82116001811461c956576000831561c93e5750848201515b600019600385901b1c1916600184901b178455612639565b600084815260208120601f198516915b8281101561c986578785015182556020948501946001909201910161c966565b508482101561c9a45786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201526000618d0b608083018461c4be565b60006020828403121561c9fc57600080fd5b5051919050565b6001600160a01b038416815282602082015260606040820152600061a53f606083018461c4be565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115617b0857617b0861ca2b565b60808152600061ca80608083018761c4be565b6001600160a01b0386166020840152846040840152828103606084015261c20b818561c4be565b60006020828403121561cab957600080fd5b81516001600160a01b0381168114617d9e57600080fd5b6001600160a01b0381541682526001600160a01b03600182015416602083015260028101546040830152600060038201608060608501526000815461cb148161c860565b806080880152600182166000811461cb33576001811461cb6d5761cba1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660a089015260a082151560051b890101935061cba1565b84600052602060002060005b8381101561cb985781548a820160a0015260019091019060200161cb79565b890160a0019450505b50919695505050505050565b6001600160a01b0383168152604060208201526000619b8a604083018461cad0565b83815260606020820152600061cbe8606083018561c4be565b8281036040840152618d0b818561cad0565b6001600160a01b03861681526001600160a01b038516602082015283604082015260a06060820152600061cc3160a083018561c4be565b828103608084015261cc43818561cad0565b98975050505050505050565b828152604060208201526000619b8a604083018461c4be565b60608152600061cc7b606083018661c4be565b8460208401528281036040840152618d0b818561c4be565b80820180821115617b0857617b0861ca2b565b60008261ccdc577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b0383168152604060208201526000619b8a604083018461c4be565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161cd3b81601a85016020880161c49a565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161cd7881601c84016020880161c49a565b01601c01949350505050565b6040516060810167ffffffffffffffff8111828210171561cda75761cda761c831565b60405290565b60008067ffffffffffffffff84111561cdc85761cdc861c831565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561cdf75761cdf761c831565b60405283815290508082840185101561ce0f57600080fd5b619f5984602083018561c49a565b600082601f83011261ce2e57600080fd5b617d9e8383516020850161cdad565b60006020828403121561ce4f57600080fd5b815167ffffffffffffffff81111561ce6657600080fd5b617b048482850161ce1d565b6000835161ce8481846020880161c49a565b83519083019061ce9881836020880161c49a565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ced981601a85016020880161c49a565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161cf1681603384016020880161c49a565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b038316602082015260606040820152600061a53f606083018461c4be565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000617d9e608083018461c4be565b60006020828403121561cfd657600080fd5b815167ffffffffffffffff81111561cfed57600080fd5b8201601f8101841361cffe57600080fd5b617b048482516020840161cdad565b6000855161d01f818460208a0161c49a565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161d059816001840160208a0161c49a565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161d09781600284016020890161c49a565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161d0d981600284016020880161c49a565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061d124604083018461c4be565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161d19b81601f85016020870161c49a565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061d208604083018461c4be565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061d25a604083018461c4be565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161d2d181601485016020870161c49a565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061d318604083018561c4be565b8281036020840152617d9a818561c4be565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161d39181600185016020870161c49a565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161d3d781846020870161c49a565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161d48a81604b85016020870161c49a565b91909101604b0192915050565b600060ff821660ff810361d4ad5761d4ad61ca2b565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161d51481602985016020870161c49a565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000617d9e608083018461c4be565b60006020828403121561d57a57600080fd5b815167ffffffffffffffff81111561d59157600080fd5b82016060818503121561d5a357600080fd5b61d5ab61cd84565b81518060030b811461d5bc57600080fd5b8152602082015167ffffffffffffffff81111561d5d857600080fd5b61d5e48682850161ce1d565b602083015250604082015167ffffffffffffffff81111561d60457600080fd5b61d6108682850161ce1d565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161d67c81602185016020870161c49a565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161d86881602185016020880161c49a565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161d8a581602e84016020880161c49a565b01602e01949350505050565b6000825161d8c381846020870161c49a565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161d51481602985016020870161c49a565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161d98981602285016020870161c49a565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161d9ce81600e85016020870161c49a565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161daac81601885016020880161c49a565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161dae981601c84016020880161c49a565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161dbef81846020870161c49a565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417617b0857617b0861ca2b565b6001815b600184111561dc705780850481111561dc545761dc5461ca2b565b600184161561dc6257908102905b60019390931c92800261dc39565b935093915050565b60008261dc8757506001617b08565b8161dc9457506000617b08565b816001811461dcaa576002811461dcb45761dcd0565b6001915050617b08565b60ff84111561dcc55761dcc561ca2b565b50506001821b617b08565b5060208310610133831016604e8410600b841016171561dcf3575081810a617b08565b61dd00600019848461dc35565b806000190482111561dd145761dd1461ca2b565b029392505050565b6000617d9e838361dc78565b818103600083128015838313168383128216171561b6545761b65461ca2b565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161dd8081601c85016020870161c49a565b91909101601c0192915050565b6000600019820361dda05761dda061ca2b565b5060010190565b60008161ddb65761ddb661ca2b565b506000190190565b6000835161ddd081846020880161c49a565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161de0a81600184016020880161c49a565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610e9e806100246000396000f3fe60806040526004361061006e5760003560e01c8063c51316911161004b578063c5131691146100d5578063c9028a36146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a214610077578063676cc054146100975780636ed70169146100c057005b3661007557005b005b34801561008357600080fd5b506100756100923660046106ec565b610148565b6100aa6100a5366004610728565b6101de565b6040516100b79190610823565b60405180910390f35b3480156100cc57600080fd5b50610075610222565b3480156100e157600080fd5b506100756100f03660046106ec565b610257565b34801561010157600080fd5b50610075610110366004610836565b610332565b610075610123366004610996565b61036e565b34801561013457600080fd5b50610075610143366004610a82565b6103b2565b6101506103e7565b61017273ffffffffffffffffffffffffffffffffffffffff831633838661042a565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a1506040805160208101909152600081525b9392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61025f6103e7565b600061026c600285610b6c565b9050806000036102a8576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102ca73ffffffffffffffffffffffffffffffffffffffff841633848461042a565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f689a5a5cb55e795ffe4cd8b419cd3bb0a3373974c54d25f64e734d7388b93e9b3382604051610363929190610bf0565b60405180910390a150565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa33348585856040516103a5959493929190610ce2565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103a59493929190610d6c565b600260005403610423576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104bf9085906104c5565b50505050565b60006104e773ffffffffffffffffffffffffffffffffffffffff841683610560565b9050805160001415801561050c57508080602001905181019061050a9190610e2f565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061021b83836000846000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105939190610e4c565b60006040518083038185875af1925050503d80600081146105d0576040519150601f19603f3d011682016040523d82523d6000602084013e6105d5565b606091505b50915091506105e58683836105ef565b9695505050505050565b606082610604576105ff8261067e565b61021b565b8151158015610628575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610677576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610557565b508061021b565b80511561068e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106e757600080fd5b919050565b60008060006060848603121561070157600080fd5b83359250610711602085016106c3565b915061071f604085016106c3565b90509250925092565b6000806000838503604081121561073e57600080fd5b602081121561074c57600080fd5b50839250602084013567ffffffffffffffff81111561076a57600080fd5b8401601f8101861361077b57600080fd5b803567ffffffffffffffff81111561079257600080fd5b8660208284010111156107a457600080fd5b939660209190910195509293505050565b60005b838110156107d05781810151838201526020016107b8565b50506000910152565b600081518084526107f18160208601602086016107b5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061021b60208301846107d9565b60006020828403121561084857600080fd5b813567ffffffffffffffff81111561085f57600080fd5b82016080818503121561021b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156108e7576108e7610871565b604052919050565b600082601f83011261090057600080fd5b813567ffffffffffffffff81111561091a5761091a610871565b61094b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108a0565b81815284602083860101111561096057600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106c057600080fd5b80356106e78161097d565b6000806000606084860312156109ab57600080fd5b833567ffffffffffffffff8111156109c257600080fd5b6109ce868287016108ef565b9350506020840135915060408401356109e68161097d565b809150509250925092565b600067ffffffffffffffff821115610a0b57610a0b610871565b5060051b60200190565b600082601f830112610a2657600080fd5b8135610a39610a34826109f1565b6108a0565b8082825260208201915060208360051b860101925085831115610a5b57600080fd5b602085015b83811015610a78578035835260209283019201610a60565b5095945050505050565b600080600060608486031215610a9757600080fd5b833567ffffffffffffffff811115610aae57600080fd5b8401601f81018613610abf57600080fd5b8035610acd610a34826109f1565b8082825260208201915060208360051b850101925088831115610aef57600080fd5b602084015b83811015610b3157803567ffffffffffffffff811115610b1357600080fd5b610b228b6020838901016108ef565b84525060209283019201610af4565b509550505050602084013567ffffffffffffffff811115610b5157600080fd5b610b5d86828701610a15565b92505061071f6040850161098b565b600082610ba2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2e836106c3565b16604082015273ffffffffffffffffffffffffffffffffffffffff610c55602084016106c3565b166060820152600080604084013590508060808401525060608301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610ca157600080fd5b830160208101903567ffffffffffffffff811115610cbe57600080fd5b803603821315610ccd57600080fd5b608060a08501526105e560c085018284610ba7565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d1760a08301866107d9565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610d62578151865260209586019590910190600101610d44565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610dff577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610dea8583516107d9565b94506020938401939190910190600101610db0565b505050508281036040840152610e158186610d30565b915050610e26606083018415159052565b95945050505050565b600060208284031215610e4157600080fd5b815161021b8161097d565b60008251610e5e8184602087016107b5565b919091019291505056fea26469706673582212200121b4788f0b35a4b6df21db4f43708a9b20e8b16f616e6f3300230e75bbdd1364736f6c634300081a0033a26469706673582212202713ad7e5cc2ad66e07178c4ad8198235384ac12fbcb7959c9ffe42aa9bdefc164736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WHITELISTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testDepositLegacy\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositLegacyFailsIfNotSupported\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositLegacyFailsIfTokenNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallOnRevertThroughCustodyNotAllowedWithArbitraryCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveERC20ThroughCustodyTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveOnCallThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveOnCallThroughCustodyNotAllowedWithArbitraryCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgrade\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfSenderIsNotTSSUpdater\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUnwhitelist\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUnwhitelistFailsIfSenderIsNotWhitelister\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUnwhitelistFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpgradeAndWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWhitelist\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWhitelistFailsIfSenderIsNotWhitelister\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWhitelistFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawThroughCustodyFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedOnCall\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedCustodyTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyMethodsNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x600c8054600160ff199182168117909255601f8054909116909117905560a06040526000608052602d80546001600160a01b0319169055348015604157600080fd5b50620102ad80620000536000396000f3fe608060405234801561001057600080fd5b50600436106103575760003560e01c806385f438c1116101c8578063b5508aa911610104578063eb1ce7f9116100a2578063fa2a70741161007c578063fa2a7074146105e9578063fa7626d4146105f1578063fb176c12146105fe578063fe8e5f1b1461060657600080fd5b8063eb1ce7f9146105d1578063f0c8e7e0146105d9578063f4221f08146105e157600080fd5b8063c9ea7aa5116100de578063c9ea7aa514610592578063cbd57e2f1461059a578063e20c9f71146105a2578063e63ab1e9146105aa57600080fd5b8063b5508aa91461056a578063ba414fa614610572578063c713f8271461058a57600080fd5b8063a217fddf11610171578063a783c7891161014b578063a783c7891461052b578063af298bb114610552578063b0464fdc1461055a578063b421ca701461056257600080fd5b8063a217fddf14610513578063a3f9d0e01461051b578063a4943deb1461052357600080fd5b80639319ae1b116101a25780639319ae1b146104fb5780639918c1c2146105035780639fc7fd551461050b57600080fd5b806385f438c1146104b75780639158c623146104de578063916a17c6146104e657600080fd5b806349c783dd1161029757806366d9a9a01161024057806371149c941161021a57806371149c941461048a5780637e91c50f1461049257806382c529921461049a57806385226c81146104a257600080fd5b806366d9a9a0146104655780636a6218541461047a5780637099d6f81461048257600080fd5b806352ff59391161027157806352ff593914610401578063570618e1146104095780635d62c8601461043e57600080fd5b806349c783dd146103e95780634df42da1146103f157806351ecdf3c146103f957600080fd5b80632ade3880116103045780633e5e3c23116102de5780633e5e3c23146103c95780633e73ecb4146103d15780633ee92923146103d95780633f7286f4146103e157600080fd5b80632ade3880146103a45780632be6a162146103b95780633aa1298f146103c157600080fd5b80631779672f116103355780631779672f146103765780631ed7831c1461037e578063284cb9291461039c57600080fd5b8063070f2ad01461035c5780630a9254e4146103665780630eee72a91461036e575b600080fd5b61036461060e565b005b6103646107fa565b610364611281565b6103646114fe565b61038661163c565b604051610393919061cc8f565b60405180910390f35b61036461169e565b6103ac61197f565b604051610393919061cd2b565b610364611ac1565b610364611c6d565b610386612288565b6103646122e8565b61036461283b565b6103866128f7565b610364612957565b610364612c94565b610364612dec565b610364612fae565b6104307f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b604051908152602001610393565b6104307f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b61046d6137de565b604051610393919061ce91565b61036461394b565b610364613a04565b610364613cb2565b610364614386565b610364614511565b6104aa614783565b604051610393919061cf2f565b6104307f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b610364614853565b6104ee614921565b604051610393919061cfa6565b610364614a07565b610364614b16565b610364614dfa565b610430600081565b610364614ec8565b6103646154a7565b6104307f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6103646156ba565b6104ee615c5e565b610364615d44565b6104aa61620a565b61057a6162da565b6040519015158152602001610393565b6103646163ae565b610364616fff565b610364617210565b6103866172ae565b6104307f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61036461730e565b61036461741a565b6103646175c6565b61036461781d565b601f5461057a9060ff1681565b610364617afe565b610364618155565b6027546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561068057600080fd5b505af1158015610694573d6000803e3d6000fd5b5050602754604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061074b919060040161d03d565b600060405180830381600087803b15801561076557600080fd5b505af1158015610779573d6000803e3d6000fd5b50506021546025546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063950837aa91506024015b600060405180830381600087803b1580156107e057600080fd5b505af11580156107f4573d6000803e3d6000fd5b50505050565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680548216611234179055602780548216615678179055602880549091166198761790556040516108589061cbba565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156108dd573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040516109229061cbba565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156109a6573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260275460255492519086169481019490945260448401929092529092166064820152600091610a85916084015b60408051601f198184030181529190526020810180516001600160e01b03167fc0c53b8b0000000000000000000000000000000000000000000000000000000017905261832e565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0384811682029290921792839055604080518082018252601081527f4552433230437573746f64792e736f6c0000000000000000000000000000000060208201526027546025549251939095048416602484015293831660448301529091166064820152919250610b2891608401610a3d565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691909117909155604080518082018252601a81527f5a657461436f6e6e6563746f724e6f6e4e61746976652e736f6c0000000000006020820152601f546024805460275460255495516101009094048716928401929092528516604483015284166064820152919092166084820152919250610c1a9160a40160408051601f198184030181529190526020810180516001600160e01b03167ff8c8765e0000000000000000000000000000000000000000000000000000000017905261832e565b602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316179055604051909150610c5c9061cbc8565b604051809103906000f080158015610c78573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610d2457600080fd5b505af1158015610d38573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610dae57600080fd5b505af1158015610dc2573d6000803e3d6000fd5b5050601f546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f9150602401600060405180830381600087803b158015610e2d57600080fd5b505af1158015610e41573d6000803e3d6000fd5b5050601f546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef9150602401600060405180830381600087803b158015610eac57600080fd5b505af1158015610ec0573d6000803e3d6000fd5b50506021546023546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401600060405180830381600087803b158015610f2657600080fd5b505af1158015610f3a573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f9c57600080fd5b505af1158015610fb0573d6000803e3d6000fd5b50506023546025546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561101f57600080fd5b505af1158015611033573d6000803e3d6000fd5b5050602480546025546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f4240938101939093521692506340c10f199150604401600060405180830381600087803b1580156110a457600080fd5b505af11580156110b8573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af115801561112c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611150919061d050565b506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156111d157600080fd5b505af11580156111e5573d6000803e3d6000fd5b5050604080516080810182526025546001600160a01b039081168252602354811660208084019182526001848601908152855191820190955260008152606084018190528351602980549185167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161781559251602a8054919095169116179092559251602b55909350909150602c906107f4908261d135565b602354602654604051620186a0602482018190526001600160a01b03938416604483015292909116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167fc513169100000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b15801561135357600080fd5b505af1158015611367573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061143d919060040161d03d565b600060405180830381600087803b15801561145757600080fd5b505af115801561146b573d6000803e3d6000fd5b50506021546020546023546040517fad0818520000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063ad08185294506114c893602d9381169216908890889060040161d1f4565b600060405180830381600087803b1580156114e257600080fd5b505af11580156114f6573d6000803e3d6000fd5b505050505050565b6023546026546040516000602482018190526001600160a01b039384166044830152929091166064820152819060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602754905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024015b600060405180830381600087803b1580156115cd57600080fd5b505af11580156115e1573d6000803e3d6000fd5b5050604051630618f58760e51b81527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e0915060240161143d565b6060601680548060200260200160405190810160405280929190818152602001828054801561169457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611676575b5050505050905090565b602154602480546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600093919091169163d936547e9101602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b919061d050565b905061173860008261834d565b6021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156117ad57600080fd5b505af11580156117c1573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549150600090a260255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561185657600080fd5b505af115801561186a573d6000803e3d6000fd5b5050602154602480546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639b19251a925001600060405180830381600087803b1580156118cf57600080fd5b505af11580156118e3573d6000803e3d6000fd5b5050602154602480546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529216935063d936547e925001602060405180830381865afa15801561194b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196f919061d050565b905061197c60018261834d565b50565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015611ab857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611aa1578382906000526020600020018054611a149061d0a1565b80601f0160208091040260200160405190810160405280929190818152602001828054611a409061d0a1565b8015611a8d5780601f10611a6257610100808354040283529160200191611a8d565b820191906000526020600020905b815481529060010190602001808311611a7057829003601f168201915b5050505050815260200190600101906119f5565b5050505081525050815260200190600101906119a3565b50505050905090565b60405163ca669fa760e01b81526101236004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611b0f57600080fd5b505af1158015611b23573d6000803e3d6000fd5b50506040805161012360248201527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60448083019190915282518083039091018152606490910182526020810180516001600160e01b03167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611bef919060040161d03d565b600060405180830381600087803b158015611c0957600080fd5b505af1158015611c1d573d6000803e3d6000fd5b5050602154602480546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639b19251a9250016107c6565b604080518082018252600181527f3100000000000000000000000000000000000000000000000000000000000000602082015260235460265492516370a0823160e01b81526001600160a01b039384166004820152620186a09361012393926000929116906370a0823190602401602060405180830381865afa158015611cf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1c919061d23b565b9050611d298160006183cf565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9e919061d23b565b6020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611e1657600080fd5b505af1158015611e2a573d6000803e3d6000fd5b505050507fd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a3525018484604051611e5f92919061d254565b60405180910390a16021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611edc57600080fd5b505af1158015611ef0573d6000803e3d6000fd5b50506023546020546040516001600160a01b039283169450911691507f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d590611f3b908990889061d276565b60405180910390a360275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611f9c57600080fd5b505af1158015611fb0573d6000803e3d6000fd5b505060215460408051602080820183526001600160a01b038a81168352905460235493517fad081852000000000000000000000000000000000000000000000000000000008152948216965063ad081852955061201c949293908216929116908b908a9060040161d28f565b600060405180830381600087803b15801561203657600080fd5b505af115801561204a573d6000803e3d6000fd5b50506023546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561209d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c1919061d23b565b90506120ce8160006183cf565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561211f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612143919061d23b565b905061214f81846183cf565b602354601f546020546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b0390811660048401529081166024830152600092169063dd62ed3e90604401602060405180830381865afa1580156121c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121eb919061d23b565b90506121f88160006183cf565b602354601f546040516370a0823160e01b81526101009091046001600160a01b03908116600483015260009216906370a0823190602401602060405180830381865afa15801561224c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612270919061d23b565b905061227d8160006183cf565b505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015611694576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611676575050505050905090565b6023546026546040516370a0823160e01b81526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa15801561233b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235f919061d23b565b905061236c8160006183cf565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156123bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e1919061d23b565b602654604080516001600160a01b039283166024820152604480820188905282518083039091018152606490910182526020810180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926124a092911690600090869060040161d2d6565b600060405180830381600087803b1580156124ba57600080fd5b505af11580156124ce573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561254757600080fd5b505af115801561255b573d6000803e3d6000fd5b50506023546026546040518881526001600160a01b039283169450911691507fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb9060200160405180910390a360275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561260057600080fd5b505af1158015612614573d6000803e3d6000fd5b50506021546026546023546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152604481018990529116925063d9caed129150606401600060405180830381600087803b15801561268c57600080fd5b505af11580156126a0573d6000803e3d6000fd5b50506023546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156126f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612717919061d23b565b905061272381866183cf565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612774573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612798919061d23b565b90506127ad816127a8888761d32d565b6183cf565b602354601f546040516370a0823160e01b81526101009091046001600160a01b03908116600483015260009216906370a0823190602401602060405180830381865afa158015612801573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612825919061d23b565b90506128328160006183cf565b50505050505050565b602354602654604051620186a0602482018190526001600160a01b03938416604483015292909116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401611339565b60606017805480602002602001604051908101604052809291908181526020018280548015611694576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611676575050505050905090565b6021546040517feab103df000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039091169063eab103df90602401600060405180830381600087803b1580156129b657600080fd5b505af11580156129ca573d6000803e3d6000fd5b50506023546021546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af1158015612a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a62919061d050565b50602480546021546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424093810193909352169063095ea7b3906044016020604051808303816000875af1158015612ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af9919061d050565b50604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025820192839052630618f58760e51b9092527f73cba663000000000000000000000000000000000000000000000000000000006029820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906049015b600060405180830381600087803b158015612ba157600080fd5b505af1158015612bb5573d6000803e3d6000fd5b505060215460265460405160609190911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208201526001600160a01b03909116925063e609055e915060340160408051601f19818403018152908290526023547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352612c5f926001600160a01b03909116906103e890879060040161d340565b600060405180830381600087803b158015612c7957600080fd5b505af1158015612c8d573d6000803e3d6000fd5b5050505050565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015612d0657600080fd5b505af1158015612d1a573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612d8a57600080fd5b505af1158015612d9e573d6000803e3d6000fd5b50506021546040517f950837aa000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063950837aa91506024016107c6565b6023546026546040516001602482018190526001600160a01b03938416604483015292909116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602754905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612ebb57600080fd5b505af1158015612ecf573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612f3f57600080fd5b505af1158015612f53573d6000803e3d6000fd5b50506021546023546040517fad0818520000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063ad08185293506114c892602d926000929116908890889060040161d1f4565b6021546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4600482015261432160248201819052916000916001600160a01b03909116906391d1485490604401602060405180830381865afa15801561303d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613061919061d050565b905061306c81618427565b6021546040517f91d148540000000000000000000000000000000000000000000000000000000081527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60048201526001600160a01b03848116602483015260009216906391d1485490604401602060405180830381865afa1580156130f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061311a919061d050565b905061312581618427565b6021546027546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b03918216602482015260009291909116906391d1485490604401602060405180830381865afa1580156131b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d9919061d050565b90506131e4816184a1565b6021546027546040517f91d148540000000000000000000000000000000000000000000000000000000081527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60048201526001600160a01b03918216602482015260009291909116906391d1485490604401602060405180830381865afa158015613274573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613298919061d050565b90506132a3816184a1565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561331557600080fd5b505af1158015613329573d6000803e3d6000fd5b50506021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156133a257600080fd5b505af11580156133b6573d6000803e3d6000fd5b5050602754604080516001600160a01b03928316815291891660208301527f4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6935001905060405180910390a16021546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b0387811660048301529091169063950837aa90602401600060405180830381600087803b15801561346257600080fd5b505af1158015613476573d6000803e3d6000fd5b505050506134fa85602160009054906101000a90046001600160a01b03166001600160a01b0316635b1125916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134f5919061d37a565b6184f3565b6021546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b038781166024830152909116906391d1485490604401602060405180830381865afa158015613583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135a7919061d050565b93506135b2846184a1565b6021546040517f91d148540000000000000000000000000000000000000000000000000000000081527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60048201526001600160a01b038781166024830152909116906391d1485490604401602060405180830381865afa15801561363b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061365f919061d050565b925061366a836184a1565b6021546027546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b0391821660248201529116906391d1485490604401602060405180830381865afa1580156136f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613719919061d050565b915061372482618427565b6021546027546040517f91d148540000000000000000000000000000000000000000000000000000000081527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60048201526001600160a01b0391821660248201529116906391d1485490604401602060405180830381865afa1580156137af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137d3919061d050565b9050612c8d81618427565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611ab857838290600052602060002090600202016040518060400160405290816000820180546138359061d0a1565b80601f01602080910402602001604051908101604052809291908181526020018280546138619061d0a1565b80156138ae5780601f10613883576101008083540402835291602001916138ae565b820191906000526020600020905b81548152906001019060200180831161389157829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561393357602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116138f55790505b50505050508152505081526020019060010190613802565b6023546026546040516000602482018190526001600160a01b039384166044830152929091166064820152819060840160408051601f198184030181529181526020820180516001600160e01b03167fc513169100000000000000000000000000000000000000000000000000000000179052602754905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024016115b3565b6021546040517feab103df000000000000000000000000000000000000000000000000000000008152600160048201526001600160a01b039091169063eab103df90602401600060405180830381600087803b158015613a6357600080fd5b505af1158015613a77573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b158015613add57600080fd5b505af1158015613af1573d6000803e3d6000fd5b50506023546021546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af1158015613b65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b89919061d050565b50602480546021546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424093810193909352169063095ea7b3906044016020604051808303816000875af1158015613bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c20919061d050565b50604080517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152815160058183030181526025820192839052630618f58760e51b9092527f584a7938000000000000000000000000000000000000000000000000000000006029820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090604901612b87565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f19018152908290526023546020546370a0823160e01b84526001600160a01b0390811660048501529193506000929116906370a0823190602401602060405180830381865afa158015613d46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d6a919061d23b565b9050613d778160006183cf565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015613dc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dec919061d23b565b601f54604080516001600160a01b0361010090930483166024820152604480820189905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000006001600160e01b0390911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392613eb292911690600090869060040161d2d6565b600060405180830381600087803b158015613ecc57600080fd5b505af1158015613ee0573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613f5957600080fd5b505af1158015613f6d573d6000803e3d6000fd5b505050507f689a5a5cb55e795ffe4cd8b419cd3bb0a3373974c54d25f64e734d7388b93e9b601f60019054906101000a90046001600160a01b03166029604051613fb892919061d480565b60405180910390a1601f546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561403957600080fd5b505af115801561404d573d6000803e3d6000fd5b50506023546020546040516001600160a01b039283169450911691507fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e0359061409b908990899060299061d4a2565b60405180910390a36021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561411857600080fd5b505af115801561412c573d6000803e3d6000fd5b50506023546020546040516001600160a01b039283169450911691507f7b53ec10a80164e60591c43d9c222e9354886981b880a3fba19c9ceb77fb97219061417a908990899060299061d4a2565b60405180910390a360275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156141db57600080fd5b505af11580156141ef573d6000803e3d6000fd5b50506021546020546023546040517f99a3c3560000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506399a3c356945061424f9392831692909116908a908a9060299060040161d4cd565b600060405180830381600087803b15801561426957600080fd5b505af115801561427d573d6000803e3d6000fd5b50506023546020546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa1580156142d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142f5919061d23b565b905061430181876183cf565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614352573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614376919061d23b565b905061214f816127a8898761d32d565b6040517f68656c6c6f000000000000000000000000000000000000000000000000000000602082015260019060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561441f57600080fd5b505af1158015614433573d6000803e3d6000fd5b5050604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156144a357600080fd5b505af11580156144b7573d6000803e3d6000fd5b50506021546023546040517f99a3c3560000000000000000000000000000000000000000000000000000000081526001600160a01b0392831694506399a3c35693506114c89260009216908790879060299060040161d4cd565b6027546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561458357600080fd5b505af1158015614597573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b1580156145fd57600080fd5b505af1158015614611573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561468157600080fd5b505af1158015614695573d6000803e3d6000fd5b50506021546026546023546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152600160448201529116925063d9caed129150606401600060405180830381600087803b15801561470d57600080fd5b505af1158015614721573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107e057600080fd5b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015611ab85783829060005260206000200180546147c69061d0a1565b80601f01602080910402602001604051908101604052809291908181526020018280546147f29061d0a1565b801561483f5780601f106148145761010080835404028352916020019161483f565b820191906000526020600020905b81548152906001019060200180831161482257829003601f168201915b5050505050815260200190600101906147a7565b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156148bf57600080fd5b505af11580156148d3573d6000803e3d6000fd5b50506021546040517f9a590427000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039091169250639a59042791506024016107c6565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015611ab85760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156149ef57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116149b15790505b50505050508152505081526020019060010190614945565b604080516004808252602480830184526020830180516001600160e01b03167fc9028a36000000000000000000000000000000000000000000000000000000001790529251630618f58760e51b81527ff3459a960000000000000000000000000000000000000000000000000000000091810191909152620186a092737109709ecfa91a80626ff3989d68f67f5b1dd12d9163c31eb0e09101600060405180830381600087803b158015614aba57600080fd5b505af1158015614ace573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa7915060240161143d565b602354602654604051600160248201526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a20000000000000000000000000000000000000000000000000000000017905260275490517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015614bfa57600080fd5b505af1158015614c0e573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b158015614c7457600080fd5b505af1158015614c88573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015614cf857600080fd5b505af1158015614d0c573d6000803e3d6000fd5b50506021546020546023546040517fad0818520000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063ad0818529450614d6a93602d938116921690600190889060040161d1f4565b600060405180830381600087803b158015614d8457600080fd5b505af1158015614d98573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c7957600080fd5b604051630618f58760e51b81527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015614e6657600080fd5b505af1158015614e7a573d6000803e3d6000fd5b50506021546040517f9b19251a000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b039091169250639b19251a91506024016107c6565b604080516004808252602480830184526020830180516001600160e01b03167f6ed701690000000000000000000000000000000000000000000000000000000017905260235460265494516370a0823160e01b81526001600160a01b0395861693810193909352620186a0946000939116916370a082319101602060405180830381865afa158015614f5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f82919061d23b565b9050614f8f8160006183cf565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614fe0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615004919061d23b565b601f54604080516001600160a01b0361010090930483166024820152604480820189905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000006001600160e01b0390911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926150ca92911690600090869060040161d2d6565b600060405180830381600087803b1580156150e457600080fd5b505af11580156150f8573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561517157600080fd5b505af1158015615185573d6000803e3d6000fd5b5050601f546040516101009091046001600160a01b031681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09250602001905060405180910390a16021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561524357600080fd5b505af1158015615257573d6000803e3d6000fd5b50506023546020546040516001600160a01b039283169450911691507f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d5906152a2908990899061d276565b60405180910390a360275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561530357600080fd5b505af1158015615317573d6000803e3d6000fd5b50506021546020546023546040517fad0818520000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063ad081852945061537493602d9381169216908b908b9060040161d1f4565b600060405180830381600087803b15801561538e57600080fd5b505af11580156153a2573d6000803e3d6000fd5b50506023546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156153f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615419919061d23b565b90506154268160006183cf565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015615477573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061549b919061d23b565b905061214f81856183cf565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561554257600080fd5b505af1158015615556573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061562c919060040161d03d565b600060405180830381600087803b15801561564657600080fd5b505af115801561565a573d6000803e3d6000fd5b50506021546020546023546040517f99a3c3560000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506399a3c35694506114c89392831692909116908790879060299060040161d4cd565b602154604080518082018252601b81527f4552433230437573746f647955706772616465546573742e736f6c000000000060208083019190915282519081019092526000825260255461571a936001600160a01b03908116939116618554565b6021546023546026546040516370a0823160e01b81526001600160a01b03918216600482015292811692620186a09260009216906370a0823190602401602060405180830381865afa158015615774573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615798919061d23b565b90506157a58160006183cf565b6023546040516370a0823160e01b81526001600160a01b03858116600483015260009216906370a0823190602401602060405180830381865afa1580156157f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615814919061d23b565b602654604080516001600160a01b039283166024820152604480820188905282518083039091018152606490910182526020810180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926158d392911690600090869060040161d2d6565b600060405180830381600087803b1580156158ed57600080fd5b505af1158015615901573d6000803e3d6000fd5b50506040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b0388166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561597657600080fd5b505af115801561598a573d6000803e3d6000fd5b50506023546026546040518881526001600160a01b039283169450911691507fd4dabfe72081670cc78f2ebda8e2eddaf3feebde6288dcb8fe673b3dc201b5a49060200160405180910390a360275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615a2f57600080fd5b505af1158015615a43573d6000803e3d6000fd5b50506026546023546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216602482015260448101889052908816925063d9caed129150606401600060405180830381600087803b158015615ab957600080fd5b505af1158015615acd573d6000803e3d6000fd5b50506023546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015615b20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615b44919061d23b565b9050615b5081866183cf565b6023546040516370a0823160e01b81526001600160a01b03888116600483015260009216906370a0823190602401602060405180830381865afa158015615b9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615bbf919061d23b565b9050615bcf816127a8888761d32d565b602354601f546040516370a0823160e01b81526101009091046001600160a01b03908116600483015260009216906370a0823190602401602060405180830381865afa158015615c23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615c47919061d23b565b9050615c548160006183cf565b5050505050505050565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015611ab85760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015615d2c57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411615cee5790505b50505050508152505081526020019060010190615c82565b6021546040517feab103df000000000000000000000000000000000000000000000000000000008152600160048201526103e8916001600160a01b03169063eab103df90602401600060405180830381600087803b158015615da557600080fd5b505af1158015615db9573d6000803e3d6000fd5b50506023546021546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af1158015615e2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615e51919061d050565b50602480546021546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424093810193909352169063095ea7b3906044016020604051808303816000875af1158015615ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615ee8919061d050565b506023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015615f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615f5e919061d23b565b90506000604051602001615f95907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f19018152908290526021546381bad6f360e01b8352600160048401819052602484018190526044840181905260648401526001600160a01b031660848301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561601857600080fd5b505af115801561602c573d6000803e3d6000fd5b505060235460265460405160609190911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208201526001600160a01b0390911692507f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae915060340160408051601f19818403018152908290526160b5918790869061d522565b60405180910390a26021546026546040805160609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208301528051808303601401815260348301918290526023547fe609055e000000000000000000000000000000000000000000000000000000009092526001600160a01b039384169363e609055e936161549391909116908890879060380161d340565b600060405180830381600087803b15801561616e57600080fd5b505af1158015616182573d6000803e3d6000fd5b505050506162058383616195919061d54d565b6023546021546040516370a0823160e01b81526001600160a01b0391821660048201529116906370a0823190602401602060405180830381865afa1580156161e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a8919061d23b565b505050565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015611ab857838290600052602060002001805461624d9061d0a1565b80601f01602080910402602001604051908101604052809291908181526020018280546162799061d0a1565b80156162c65780601f1061629b576101008083540402835291602001916162c6565b820191906000526020600020905b8154815290600101906020018083116162a957829003601f168201915b50505050508152602001906001019061622e565b60085460009060ff16156162f2575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015616383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906163a7919061d23b565b1415905090565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561640757600080fd5b505af115801561641b573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506164f1919060040161d03d565b600060405180830381600087803b15801561650b57600080fd5b505af115801561651f573d6000803e3d6000fd5b50505050602160009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561657357600080fd5b505af1158015616587573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156165e457600080fd5b505af11580156165f8573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506166ce919060040161d03d565b600060405180830381600087803b1580156166e857600080fd5b505af11580156166fc573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561675057600080fd5b505af1158015616764573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156167c157600080fd5b505af11580156167d5573d6000803e3d6000fd5b50505050602160009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561682957600080fd5b505af115801561683d573d6000803e3d6000fd5b5050602354602654604051620186a0602482018190526001600160a01b0393841660448301529290911660648201529092506000915060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a20000000000000000000000000000000000000000000000000000000017905251630618f58760e51b81527fd93c0665000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561692657600080fd5b505af115801561693a573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561699757600080fd5b505af11580156169ab573d6000803e3d6000fd5b50506021546020546023546040517fad0818520000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063ad0818529450616a0893602d9381169216908890889060040161d1f4565b600060405180830381600087803b158015616a2257600080fd5b505af1158015616a36573d6000803e3d6000fd5b505060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015616a9357600080fd5b505af1158015616aa7573d6000803e3d6000fd5b50505050602160009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015616afb57600080fd5b505af1158015616b0f573d6000803e3d6000fd5b50506023546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015616b63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616b87919061d23b565b9050616b948160006183cf565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015616be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616c09919061d23b565b601f54604080516001600160a01b0361010090930483166024820152604480820189905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000006001600160e01b0390911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392616ccf92911690600090869060040161d2d6565b600060405180830381600087803b158015616ce957600080fd5b505af1158015616cfd573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015616d7657600080fd5b505af1158015616d8a573d6000803e3d6000fd5b5050601f54602354602654604080516101009094046001600160a01b039081168552602085018c9052928316908401521660608201527f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609250608001905060405180910390a16021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015616e6557600080fd5b505af1158015616e79573d6000803e3d6000fd5b50506023546020546040516001600160a01b039283169450911691507f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d590616ec4908990899061d276565b60405180910390a360275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015616f2557600080fd5b505af1158015616f39573d6000803e3d6000fd5b50506021546020546023546040517fad0818520000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063ad0818529450616f9693602d9381169216908b908b9060040161d1f4565b600060405180830381600087803b158015616fb057600080fd5b505af1158015616fc4573d6000803e3d6000fd5b50506023546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024016142b4565b604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000060208201529051620186a09161012391600090617050908490849060240161d254565b60408051601f198184030181529181526020820180516001600160e01b03167f676cc0540000000000000000000000000000000000000000000000000000000017905251630618f58760e51b81527fed699775000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561710057600080fd5b505af1158015617114573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561717157600080fd5b505af1158015617185573d6000803e3d6000fd5b50506021546020546023546040517fad0818520000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063ad08185294506171e293602d9381169216908a90889060040161d1f4565b600060405180830381600087803b1580156171fc57600080fd5b505af1158015615c54573d6000803e3d6000fd5b60235460265460408051620186a060248083018290526001600160a01b039586166044840181905295909416606480840182905284518085039091018152608490930184526020830180516001600160e01b03167f357fc5a20000000000000000000000000000000000000000000000000000000017905292516370a0823160e01b815260048101939093529390926000926370a082319101616b46565b60606015805480602002602001604051908101604052809291908181526020018280548015611694576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611676575050505050905090565b600080604051602001617344907f68656c6c6f000000000000000000000000000000000000000000000000000000815260050190565b60408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156173ab57600080fd5b505af11580156173bf573d6000803e3d6000fd5b5050604051630618f58760e51b81527f951e19ed000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e0915060240161562c565b60405163ca669fa760e01b81526101236004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561746857600080fd5b505af115801561747c573d6000803e3d6000fd5b50506040805161012360248201527f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a60448083019190915282518083039091018152606490910182526020810180516001600160e01b03167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250617548919060040161d03d565b600060405180830381600087803b15801561756257600080fd5b505af1158015617576573d6000803e3d6000fd5b5050602154602480546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015292169350639a5904279250016107c6565b602354602654604051600160248201526001600160a01b0392831660448201529116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a20000000000000000000000000000000000000000000000000000000017905260275490517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156176aa57600080fd5b505af11580156176be573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b15801561772457600080fd5b505af1158015617738573d6000803e3d6000fd5b5050604051630618f58760e51b81527f584a7938000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156177a857600080fd5b505af11580156177bc573d6000803e3d6000fd5b50506021546020546023546040517f99a3c3560000000000000000000000000000000000000000000000000000000081526001600160a01b0393841695506399a3c3569450614d6a939283169290911690600190879060299060040161d4cd565b6021546023546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152600092919091169063d936547e90602401602060405180830381865afa158015617887573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906178ab919061d050565b90506178b860018261834d565b6021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561792d57600080fd5b505af1158015617941573d6000803e3d6000fd5b50506023546040516001600160a01b0390911692507f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919150600090a260255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156179d657600080fd5b505af11580156179ea573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b158015617a5057600080fd5b505af1158015617a64573d6000803e3d6000fd5b50506021546023546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063d936547e9150602401602060405180830381865afa158015617acd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190617af1919061d050565b905061197c60008261834d565b602354602654604051620186a0602482018190526001600160a01b03938416604483015292909116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167fc51316910000000000000000000000000000000000000000000000000000000017905260235460265491516370a0823160e01b81526001600160a01b0392831660048201529293506000929116906370a0823190602401602060405180830381865afa158015617bc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190617be9919061d23b565b9050617bf68160006183cf565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015617c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190617c6b919061d23b565b601f54604080516001600160a01b0361010090930483166024820152604480820189905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000006001600160e01b0390911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392617d3192911690600090869060040161d2d6565b600060405180830381600087803b158015617d4b57600080fd5b505af1158015617d5f573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015617dd857600080fd5b505af1158015617dec573d6000803e3d6000fd5b5050601f547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af60925061010090046001600160a01b03169050617e2f60028861d560565b602354602654604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16021546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015617ede57600080fd5b505af1158015617ef2573d6000803e3d6000fd5b50506023546020546040516001600160a01b039283169450911691507f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d590617f3d908990899061d276565b60405180910390a360275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015617f9e57600080fd5b505af1158015617fb2573d6000803e3d6000fd5b50506021546020546023546040517fad0818520000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063ad081852945061800f93602d9381169216908b908b9060040161d1f4565b600060405180830381600087803b15801561802957600080fd5b505af115801561803d573d6000803e3d6000fd5b50506023546026546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015618090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906180b4919061d23b565b90506180c5816127a860028961d560565b6023546021546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015618116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061813a919061d23b565b905061214f8161814b60028a61d560565b6127a8908761d32d565b60255460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156181b357600080fd5b505af11580156181c7573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061829d919060040161d03d565b600060405180830381600087803b1580156182b757600080fd5b505af11580156182cb573d6000803e3d6000fd5b50506021546026546023546040517fd9caed120000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152604481018690529116925063d9caed129150606401612c5f565b600061833861cbd6565b618343848483618569565b9150505b92915050565b6040517ff7fe347700000000000000000000000000000000000000000000000000000000815282151560048201528115156024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f7fe3477906044015b60006040518083038186803b1580156183bb57600080fd5b505afa1580156114f6573d6000803e3d6000fd5b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044016183a3565b6040517fa59828850000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063a5982885906024015b60006040518083038186803b15801561848d57600080fd5b505afa158015612c8d573d6000803e3d6000fd5b6040517f0c9fd5810000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90630c9fd58190602401618475565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f6906044016183a3565b61855c61cbd6565b612c8d85858584866185e4565b60008061857685846186e4565b90506185d96040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016185c492919061d254565b604051602081830303815290604052856186f0565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b15801561865657600080fd5b505af1925050508015618667575060015b61867c576186778787878761871e565b612832565b6186888787878761871e565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156186c357600080fd5b505af11580156186d7573d6000803e3d6000fd5b5050505050505050505050565b60006185dd8383618737565b60c081015151600090156187145761870d84848460c00151618752565b90506185dd565b61870d84846188f8565b600061872a84836189e3565b9050612c8d8582856189ef565b60006187438383618db9565b6185dd838360200151846186f0565b60008061875d618dc9565b9050600061876b8683618e9c565b905060006187828260600151836020015185619342565b9050600061879283838989619554565b9050600061879f8261a3d1565b602081015181519192509060030b15618812578982604001516040516020016187c992919061d59b565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526188099160040161d03d565b60405180910390fd5b60006188556040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161a5a0565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906188a890849060040161d03d565b602060405180830381865afa1580156188c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906188e9919061d37a565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061894d90879060040161d03d565b600060405180830381865afa15801561896a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618992919081019061d6d5565b905060006189c082856040516020016189ac92919061d70a565b60405160208183030381529060405261a7a0565b90506001600160a01b0381166183435784846040516020016187c992919061d739565b6000618743838361a7b3565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa158015618a8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190618aaf919061d23b565b905080618c56576000618ac18661a7bf565b604080518082018252600581527f352e302e3000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618b4c905b6040805180820182526000808252602091820152815180830190925284518252808501908201529061a8a2565b80618b58575060008451115b15618bdb576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef28690618ba4908890889060040161d254565b600060405180830381600087803b158015618bbe57600080fd5b505af1158015618bd2573d6000803e3d6000fd5b50505050618c50565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b158015618c3757600080fd5b505af1158015618c4b573d6000803e3d6000fd5b505050505b50612c8d565b806000618c628261a7bf565b604080518082018252600581527f352e302e3000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618cc490618b1f565b80618cd0575060008551115b15618d55576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90618d1e908a908a908a9060040161d7e4565b600060405180830381600087803b158015618d3857600080fd5b505af1158015618d4c573d6000803e3d6000fd5b50505050612832565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b1580156186c357600080fd5b618dc58282600061a8b6565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90618e5090849060040161d815565b600060405180830381865afa158015618e6d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618e95919081019061d85c565b9250505090565b618ece6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050618f196040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b618f228561a9b9565b60208201526000618f328661ad9e565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015618f74573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052618f9c919081019061d85c565b86838560200151604051602001618fb6949392919061d8a5565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061900e90859060040161d03d565b600060405180830381865afa15801561902b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052619053919081019061d85c565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061909b90849060040161d9a9565b602060405180830381865afa1580156190b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906190dc919061d050565b6190f157816040516020016187c9919061d9fb565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061913690849060040161da8d565b600060405180830381865afa158015619153573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261917b919081019061d85c565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906191c290849060040161dadf565b602060405180830381865afa1580156191df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190619203919061d050565b15619298576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061924d90849060040161dadf565b600060405180830381865afa15801561926a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052619292919081019061d85c565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016192bd919061db31565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016192e992919061db9d565b600060405180830381865afa158015619306573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261932e919081019061d85c565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161935e5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106193be576193be61dbc2565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106194125761941261dbc2565b60200260200101819052508460405160200161942e919061dbf1565b604051602081830303815290604052816002815181106194505761945061dbc2565b60200260200101819052508260405160200161946c919061dc5d565b6040516020818303038152906040528160038151811061948e5761948e61dbc2565b602002602001018190525060006194a48261a3d1565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250619535906040805180820182526000808252602091820152815180830190925284518252808501908201529061b021565b61954a57856040516020016187c9919061dc9e565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156195a4565b511590565b61971857826020015115619660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401618809565b8260c0015115619718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401618809565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161973157905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061978c9061dd2f565b935060ff16815181106197a1576197a161dbc2565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016197f2919061dd4e565b60405160208183030381529060405282828061980d9061dd2f565b935060ff16815181106198225761982261dbc2565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061986f9061dd2f565b935060ff16815181106198845761988461dbc2565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806198d19061dd2f565b935060ff16815181106198e6576198e661dbc2565b602002602001018190525087602001518282806199029061dd2f565b935060ff16815181106199175761991761dbc2565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806199649061dd2f565b935060ff16815181106199795761997961dbc2565b6020908102919091010152875182826199918161dd2f565b935060ff16815181106199a6576199a661dbc2565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806199f39061dd2f565b935060ff1681518110619a0857619a0861dbc2565b6020026020010181905250619a1c4661b082565b8282619a278161dd2f565b935060ff1681518110619a3c57619a3c61dbc2565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280619a899061dd2f565b935060ff1681518110619a9e57619a9e61dbc2565b602002602001018190525086828280619ab69061dd2f565b935060ff1681518110619acb57619acb61dbc2565b6020908102919091010152855115619bf25760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282619b1c8161dd2f565b935060ff1681518110619b3157619b3161dbc2565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90619b8190899060040161d03d565b600060405180830381865afa158015619b9e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052619bc6919081019061d85c565b8282619bd18161dd2f565b935060ff1681518110619be657619be661dbc2565b60200260200101819052505b846020015115619cc25760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282619c3b8161dd2f565b935060ff1681518110619c5057619c5061dbc2565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280619c9d9061dd2f565b935060ff1681518110619cb257619cb261dbc2565b6020026020010181905250619e89565b619cfa61959f8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b619d8d5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282619d3d8161dd2f565b935060ff1681518110619d5257619d5261dbc2565b60200260200101819052508460a00151604051602001619d72919061dbf1565b604051602081830303815290604052828280619c9d9061dd2f565b8460c00151158015619dd0575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152619dce90511590565b155b15619e895760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282619e148161dd2f565b935060ff1681518110619e2957619e2961dbc2565b6020026020010181905250619e3d8861b122565b604051602001619e4d919061dbf1565b604051602081830303815290604052828280619e689061dd2f565b935060ff1681518110619e7d57619e7d61dbc2565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152619ebd90511590565b619f525760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282619f008161dd2f565b935060ff1681518110619f1557619f1561dbc2565b60200260200101819052508460400151828280619f319061dd2f565b935060ff1681518110619f4657619f4661dbc2565b60200260200101819052505b60608501511561a0735760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282619f9b8161dd2f565b935060ff1681518110619fb057619fb061dbc2565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561a01f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261a047919081019061d85c565b828261a0528161dd2f565b935060ff168151811061a0675761a06761dbc2565b60200260200101819052505b60e0850151511561a11a5760408051808201909152600a81527f2d2d6761734c696d6974000000000000000000000000000000000000000000006020820152828261a0bd8161dd2f565b935060ff168151811061a0d25761a0d261dbc2565b602002602001018190525061a0ee8560e001516000015161b082565b828261a0f98161dd2f565b935060ff168151811061a10e5761a10e61dbc2565b60200260200101819052505b60e0850151602001511561a1c45760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261a1678161dd2f565b935060ff168151811061a17c5761a17c61dbc2565b602002602001018190525061a1988560e001516020015161b082565b828261a1a38161dd2f565b935060ff168151811061a1b85761a1b861dbc2565b60200260200101819052505b60e0850151604001511561a26e5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261a2118161dd2f565b935060ff168151811061a2265761a22661dbc2565b602002602001018190525061a2428560e001516040015161b082565b828261a24d8161dd2f565b935060ff168151811061a2625761a26261dbc2565b60200260200101819052505b60e0850151606001511561a3185760408051808201909152601681527f2d2d6d61785072696f72697479466565506572476173000000000000000000006020820152828261a2bb8161dd2f565b935060ff168151811061a2d05761a2d061dbc2565b602002602001018190525061a2ec8560e001516060015161b082565b828261a2f78161dd2f565b935060ff168151811061a30c5761a30c61dbc2565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561a3365761a33661d072565b60405190808252806020026020018201604052801561a36957816020015b606081526020019060019003908161a3545790505b50905060005b8260ff168160ff16101561a3c257838160ff168151811061a3925761a39261dbc2565b6020026020010151828260ff168151811061a3af5761a3af61dbc2565b602090810291909101015260010161a36f565b5093505050505b949350505050565b61a3f86040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161a47e9186910161ddb9565b600060405180830381865afa15801561a49b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261a4c3919081019061d85c565b9050600061a4d1868361bc11565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161a501919061cf2f565b6000604051808303816000875af115801561a520573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261a548919081019061de00565b805190915060030b1580159061a5615750602081015151155b801561a5705750604081015151155b1561954a578160008151811061a5885761a58861dbc2565b60200260200101516040516020016187c9919061deb6565b6060600061a5d58560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061a60c9082905b9061bd66565b1561a76957600061a6898261a6838461a67d61a64f8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061bd8d565b9061bdef565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061a6ed90829061bd66565b1561a75757604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a754905b829061be74565b90505b61a7608161be9a565b925050506185dd565b821561a7825784846040516020016187c992919061e0a2565b50506040805160208101909152600081526185dd565b509392505050565b6000808251602084016000f09392505050565b618dc58282600161a8b6565b60408051600481526024810182526020810180516001600160e01b03167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b0386169161a81f919061e149565b600060405180830381855afa9150503d806000811461a85a576040519150601f19603f3d011682016040523d82523d6000602084013e61a85f565b606091505b509150915081801561a872575060208151115b1561a88b578080602001905181019061a3c9919061d85c565b505060408051602081019091526000815292915050565b600061a8ae838361bf03565b159392505050565b8160a001511561a8c557505050565b600061a8d284848461bfde565b9050600061a8df8261a3d1565b602081015181519192509060030b15801561a97b5750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261a97b9060408051808201825260008082526020918201528151808301909252845182528085019082015261a606565b1561a98857505050505050565b6040820151511561a9a85781604001516040516020016187c9919061e165565b806040516020016187c9919061e1c3565b6060600061a9ee8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061aa53905b829061b021565b1561aac257604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526185dd9061aabd90839061c579565b61be9a565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261ab24905b829061c603565b60010361abf157604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261ab8a9061a74d565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526185dd9061aabd905b839061be74565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261ac509061aa4c565b1561ad8757604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061acb890839061c69d565b90506000816001835161accb919061d32d565b8151811061acdb5761acdb61dbc2565b6020026020010151905061ad7e61aabd61ad516040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061c579565b95945050505050565b826040516020016187c9919061e22e565b50919050565b6060600061add38360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061ae359061aa4c565b1561ae43576185dd8161be9a565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261aea29061ab1d565b60010361af0c57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526185dd9061aabd9061abea565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261af6b9061aa4c565b1561ad8757604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061afd390839061c69d565b905060018151111561b00f57806002825161afee919061d32d565b8151811061affe5761affe61dbc2565b602002602001015192505050919050565b50826040516020016187c9919061e22e565b80518251600091111561b03657506000618347565b8151835160208501516000929161b04c9161d54d565b61b056919061d32d565b90508260200151810361b06d576001915050618347565b82516020840151819020912014905092915050565b6060600061b08f8361c742565b600101905060008167ffffffffffffffff81111561b0af5761b0af61d072565b6040519080825280601f01601f19166020018201604052801561b0d9576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461b0e357509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161b1ae905b829061a8a2565b1561b1ee57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b24d9061b1a7565b1561b28d57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b2ec9061b1a7565b1561b32c57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b38b9061b1a7565b8061b3f05750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b3f09061b1a7565b1561b43057505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b48f9061b1a7565b8061b4f45750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b4f49061b1a7565b1561b53457505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b5939061b1a7565b8061b5f85750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b5f89061b1a7565b1561b63857505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b6979061b1a7565b8061b6fc5750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b6fc9061b1a7565b1561b73c57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b79b9061b1a7565b1561b7db57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b83a9061b1a7565b1561b87a57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b8d99061b1a7565b1561b91957505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261b9789061b1a7565b1561b9b857505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261ba179061b1a7565b1561ba5757505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261bab69061b1a7565b8061bb1b5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261bb1b9061b1a7565b1561bb5b57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261bbba9061b1a7565b1561bbfa57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516187c9929060200161e30c565b60608060005b845181101561bc9c578185828151811061bc335761bc3361dbc2565b602002602001015160405160200161bc4c92919061d70a565b60405160208183030381529060405291506001855161bc6b919061d32d565b811461bc94578160405160200161bc82919061e475565b60405160208183030381529060405291505b60010161bc17565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161bcb5579050509050838160008151811061bce05761bce061dbc2565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061bd345761bd3461dbc2565b6020026020010181905250818160028151811061bd535761bd5361dbc2565b6020908102919091010152949350505050565b602080830151835183519284015160009361bd84929184919061c824565b14159392505050565b6040805180820190915260008082526020820152600061bdbf846000015185602001518560000151866020015161c935565b905083602001518161bdd1919061d32d565b8451859061bde090839061d32d565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561be14575081618347565b602080830151908401516001911461be3b5750815160208481015190840151829020919020145b801561be6c5782518451859061be5290839061d32d565b905250825160208501805161be6890839061d54d565b9052505b509192915050565b604080518082019091526000808252602082015261be9383838361ca55565b5092915050565b60606000826000015167ffffffffffffffff81111561bebb5761bebb61d072565b6040519080825280601f01601f19166020018201604052801561bee5576020820181803683370190505b509050600060208201905061be93818560200151866000015161cb00565b815181516000919081111561bf16575081515b6020808501519084015160005b8381101561bfcf578251825180821461bf9f57600019602087101561bf7e5760018461bf5089602061d32d565b61bf5a919061d54d565b61bf6590600861e4b6565b61bf7090600261e5b4565b61bf7a919061d32d565b1990505b818116838216818103911461bf9c5797506183479650505050505050565b50505b61bfaa60208661d54d565b945061bfb760208561d54d565b9350505060208161bfc8919061d54d565b905061bf23565b508451865161954a919061e5c0565b6060600061bfea618dc9565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161c00757905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061c0629061dd2f565b935060ff168151811061c0775761c07761dbc2565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e330000000000000000000000000000000000000000000000000081525060405160200161c0c8919061e5e0565b60405160208183030381529060405282828061c0e39061dd2f565b935060ff168151811061c0f85761c0f861dbc2565b60200260200101819052506040518060400160405280600881526020017f76616c696461746500000000000000000000000000000000000000000000000081525082828061c1459061dd2f565b935060ff168151811061c15a5761c15a61dbc2565b60200260200101819052508260405160200161c176919061dc5d565b60405160208183030381529060405282828061c1919061dd2f565b935060ff168151811061c1a65761c1a661dbc2565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061c1f39061dd2f565b935060ff168151811061c2085761c20861dbc2565b602002602001018190525061c21d878461cb7a565b828261c2288161dd2f565b935060ff168151811061c23d5761c23d61dbc2565b60209081029190910101528551511561c2e95760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261c28f8161dd2f565b935060ff168151811061c2a45761c2a461dbc2565b602002602001018190525061c2bd86600001518461cb7a565b828261c2c88161dd2f565b935060ff168151811061c2dd5761c2dd61dbc2565b60200260200101819052505b85608001511561c3575760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261c3328161dd2f565b935060ff168151811061c3475761c34761dbc2565b602002602001018190525061c3bd565b841561c3bd5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261c39c8161dd2f565b935060ff168151811061c3b15761c3b161dbc2565b60200260200101819052505b6040860151511561c4595760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261c4078161dd2f565b935060ff168151811061c41c5761c41c61dbc2565b6020026020010181905250856040015182828061c4389061dd2f565b935060ff168151811061c44d5761c44d61dbc2565b60200260200101819052505b85606001511561c4c35760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d65730000000000000000000000006020820152828261c4a28161dd2f565b935060ff168151811061c4b75761c4b761dbc2565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561c4e15761c4e161d072565b60405190808252806020026020018201604052801561c51457816020015b606081526020019060019003908161c4ff5790505b50905060005b8260ff168160ff16101561c56d57838160ff168151811061c53d5761c53d61dbc2565b6020026020010151828260ff168151811061c55a5761c55a61dbc2565b602090810291909101015260010161c51a565b50979650505050505050565b604080518082019091526000808252602082015281518351101561c59e575081618347565b8151835160208501516000929161c5b49161d54d565b61c5be919061d32d565b6020840151909150600190821461c5df575082516020840151819020908220145b801561c5fa5783518551869061c5f690839061d32d565b9052505b50929392505050565b600080826000015161c627856000015186602001518660000151876020015161c935565b61c631919061d54d565b90505b8351602085015161c645919061d54d565b811161be93578161c6558161e625565b925050826000015161c68c85602001518361c670919061d32d565b865161c67c919061d32d565b838660000151876020015161c935565b61c696919061d54d565b905061c634565b6060600061c6ab848461c603565b61c6b690600161d54d565b67ffffffffffffffff81111561c6ce5761c6ce61d072565b60405190808252806020026020018201604052801561c70157816020015b606081526020019060019003908161c6ec5790505b50905060005b815181101561a7985761c71d61aabd868661be74565b82828151811061c72f5761c72f61dbc2565b602090810291909101015260010161c707565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061c78b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061c7b7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061c7d557662386f26fc10000830492506010015b6305f5e100831061c7ed576305f5e100830492506008015b612710831061c80157612710830492506004015b6064831061c813576064830492506002015b600a83106183475760010192915050565b60008085841161c92b576020841161c8d7576000841561c86f57600161c84b86602061d32d565b61c85690600861e4b6565b61c86190600261e5b4565b61c86b919061d32d565b1990505b835181168561c87e898961d54d565b61c888919061d32d565b805190935082165b81811461c8c25787841161c8aa578794505050505061a3c9565b8361c8b48161e63f565b94505082845116905061c890565b61c8cc878561d54d565b94505050505061a3c9565b83832061c8e4858861d32d565b61c8ee908761d54d565b91505b85821061c9295784822080820361c9165761c90c868461d54d565b935050505061a3c9565b61c92160018461d32d565b92505061c8f1565b505b5092949350505050565b6000838186851161ca40576020851161c9ef576000851561c98157600161c95d87602061d32d565b61c96890600861e4b6565b61c97390600261e5b4565b61c97d919061d32d565b1990505b8451811660008761c9928b8b61d54d565b61c99c919061d32d565b855190915083165b82811461c9e15781861061c9c95761c9bc8b8b61d54d565b965050505050505061a3c9565b8561c9d38161e625565b96505083865116905061c9a4565b85965050505050505061a3c9565b508383206000905b61ca01868961d32d565b821161ca3e5785832080820361ca1d578394505050505061a3c9565b61ca2860018561d54d565b935050818061ca369061e625565b92505061c9f7565b505b61ca4a878761d54d565b979650505050505050565b6040805180820190915260008082526020820152600061ca87856000015186602001518660000151876020015161c935565b60208087018051918601919091525190915061caa3908261d32d565b83528451602086015161cab6919061d54d565b810361cac5576000855261caf7565b8351835161cad3919061d54d565b8551869061cae290839061d32d565b905250835161caf1908261d54d565b60208601525b50909392505050565b6020811061cb38578151835261cb1760208461d54d565b925061cb2460208361d54d565b915061cb3160208261d32d565b905061cb00565b600019811561cb6757600161cb4e83602061d32d565b61cb5a9061010061e5b4565b61cb64919061d32d565b90505b9151835183169219169190911790915250565b6060600061cb888484618e9c565b805160208083015160405193945061cba29390910161e656565b60405160208183030381529060405291505092915050565b610c9f806200e6af83390190565b610f2a806200f34e83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161cc1961cc1e565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161cc196040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561ccd05783516001600160a01b031683526020938401939092019160010161cca9565b509095945050505050565b60005b8381101561ccf657818101518382015260200161ccde565b50506000910152565b6000815180845261cd1781602086016020860161ccdb565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561ce27577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561ce0d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261cdf784865161ccff565b602095860195909450929092019160010161cdbd565b50919750505060209485019492909201915060010161cd53565b50929695505050505050565b600081518084526020840193506020830160005b8281101561ce875781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161ce47565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561ce27577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261cefd604088018261ccff565b905060208201519150868103602088015261cf18818361ce33565b96505050602093840193919091019060010161ceb9565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561ce27577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261cf9185835161ccff565b9450602093840193919091019060010161cf57565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561ce27577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261d027604087018261ce33565b955050602093840193919091019060010161cfce565b6020815260006185dd602083018461ccff565b60006020828403121561d06257600080fd5b815180151581146185dd57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061d0b557607f821691505b60208210810361ad98577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f82111561620557806000526020600020601f840160051c8101602085101561d1155750805b601f840160051c820191505b81811015612c8d576000815560010161d121565b815167ffffffffffffffff81111561d14f5761d14f61d072565b61d1638161d15d845461d0a1565b8461d0ee565b6020601f82116001811461d197576000831561d17f5750848201515b600019600385901b1c1916600184901b178455612c8d565b600084815260208120601f198516915b8281101561d1c7578785015182556020948501946001909201910161d1a7565b508482101561d1e55786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b0386541681526001600160a01b03851660208201526001600160a01b038416604082015282606082015260a06080820152600061ca4a60a083018461ccff565b60006020828403121561d24d57600080fd5b5051919050565b6001600160a01b038316815260406020820152600061a3c9604083018461ccff565b82815260406020820152600061a3c9604083018461ccff565b6001600160a01b0386511681526001600160a01b03851660208201526001600160a01b038416604082015282606082015260a06080820152600061ca4a60a083018461ccff565b6001600160a01b038416815282602082015260606040820152600061ad7e606083018461ccff565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156183475761834761d2fe565b60808152600061d353608083018761ccff565b6001600160a01b0386166020840152846040840152828103606084015261ca4a818561ccff565b60006020828403121561d38c57600080fd5b81516001600160a01b03811681146185dd57600080fd5b6001600160a01b0381541682526001600160a01b03600182015416602083015260028101546040830152600060038201608060608501526000815461d3e78161d0a1565b806080880152600182166000811461d406576001811461d4405761d474565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660a089015260a082151560051b890101935061d474565b84600052602060002060005b8381101561d46b5781548a820160a0015260019091019060200161d44c565b890160a0019450505b50919695505050505050565b6001600160a01b038316815260406020820152600061a3c9604083018461d3a3565b83815260606020820152600061d4bb606083018561ccff565b828103604084015261954a818561d3a3565b6001600160a01b03861681526001600160a01b038516602082015283604082015260a06060820152600061d50460a083018561ccff565b828103608084015261d516818561d3a3565b98975050505050505050565b60608152600061d535606083018661ccff565b846020840152828103604084015261954a818561ccff565b808201808211156183475761834761d2fe565b60008261d596577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161d5d381601a85016020880161ccdb565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161d61081601c84016020880161ccdb565b01601c01949350505050565b6040516060810167ffffffffffffffff8111828210171561d63f5761d63f61d072565b60405290565b60008067ffffffffffffffff84111561d6605761d66061d072565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561d68f5761d68f61d072565b60405283815290508082840185101561d6a757600080fd5b61a79884602083018561ccdb565b600082601f83011261d6c657600080fd5b6185dd8383516020850161d645565b60006020828403121561d6e757600080fd5b815167ffffffffffffffff81111561d6fe57600080fd5b6183438482850161d6b5565b6000835161d71c81846020880161ccdb565b83519083019061d73081836020880161ccdb565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161d77181601a85016020880161ccdb565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161d7ae81603384016020880161ccdb565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b038316602082015260606040820152600061ad7e606083018461ccff565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006185dd608083018461ccff565b60006020828403121561d86e57600080fd5b815167ffffffffffffffff81111561d88557600080fd5b8201601f8101841361d89657600080fd5b6183438482516020840161d645565b6000855161d8b7818460208a0161ccdb565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161d8f1816001840160208a0161ccdb565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161d92f81600284016020890161ccdb565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161d97181600284016020880161ccdb565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061d9bc604083018461ccff565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161da3381601f85016020870161ccdb565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061daa0604083018461ccff565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061daf2604083018461ccff565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161db6981601485016020870161ccdb565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061dbb0604083018561ccff565b82810360208401526185d9818561ccff565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161dc2981600185016020870161ccdb565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161dc6f81846020870161ccdb565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161dd2281604b85016020870161ccdb565b91909101604b0192915050565b600060ff821660ff810361dd455761dd4561d2fe565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161ddac81602985016020870161ccdb565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006185dd608083018461ccff565b60006020828403121561de1257600080fd5b815167ffffffffffffffff81111561de2957600080fd5b82016060818503121561de3b57600080fd5b61de4361d61c565b81518060030b811461de5457600080fd5b8152602082015167ffffffffffffffff81111561de7057600080fd5b61de7c8682850161d6b5565b602083015250604082015167ffffffffffffffff81111561de9c57600080fd5b61dea88682850161d6b5565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161df1481602185016020870161ccdb565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161e10081602185016020880161ccdb565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161e13d81602e84016020880161ccdb565b01602e01949350505050565b6000825161e15b81846020870161ccdb565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161ddac81602985016020870161ccdb565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161e22181602285016020870161ccdb565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161e26681600e85016020870161ccdb565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161e34481601885016020880161ccdb565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161e38181601c84016020880161ccdb565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161e48781846020870161ccdb565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b80820281158282048414176183475761834761d2fe565b6001815b600184111561e5085780850481111561e4ec5761e4ec61d2fe565b600184161561e4fa57908102905b60019390931c92800261e4d1565b935093915050565b60008261e51f57506001618347565b8161e52c57506000618347565b816001811461e542576002811461e54c5761e568565b6001915050618347565b60ff84111561e55d5761e55d61d2fe565b50506001821b618347565b5060208310610133831016604e8410600b841016171561e58b575081810a618347565b61e598600019848461e4cd565b806000190482111561e5ac5761e5ac61d2fe565b029392505050565b60006185dd838361e510565b818103600083128015838313168383128216171561be935761be9361d2fe565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161e61881601c85016020870161ccdb565b91909101601c0192915050565b6000600019820361e6385761e63861d2fe565b5060010190565b60008161e64e5761e64e61d2fe565b506000190190565b6000835161e66881846020880161ccdb565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161e6a281600184016020880161ccdb565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610f06806100246000396000f3fe60806040526004361061006e5760003560e01c8063c51316911161004b578063c5131691146100d5578063c9028a36146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a214610077578063676cc054146100975780636ed70169146100c057005b3661007557005b005b34801561008357600080fd5b50610075610092366004610709565b610148565b6100aa6100a5366004610745565b6101de565b6040516100b79190610840565b60405180910390f35b3480156100cc57600080fd5b5061007561023f565b3480156100e157600080fd5b506100756100f0366004610709565b610274565b34801561010157600080fd5b50610075610110366004610853565b61034f565b6100756101233660046109b3565b61038b565b34801561013457600080fd5b50610075610143366004610a9f565b6103cf565b610150610404565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610447565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b60607fd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a35250161020e6020860186610b89565b848460405161021f93929190610bed565b60405180910390a1506040805160208101909152600081525b9392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61027c610404565b6000610289600285610c26565b9050806000036102c5576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102e773ffffffffffffffffffffffffffffffffffffffff8416338484610447565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f689a5a5cb55e795ffe4cd8b419cd3bb0a3373974c54d25f64e734d7388b93e9b3382604051610380929190610c61565b60405180910390a150565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa33348585856040516103c2959493929190610d53565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103c29493929190610ddd565b600260005403610440576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104dc9085906104e2565b50505050565b600061050473ffffffffffffffffffffffffffffffffffffffff84168361057d565b905080516000141580156105295750808060200190518101906105279190610e97565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061023883836000846000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105b09190610eb4565b60006040518083038185875af1925050503d80600081146105ed576040519150601f19603f3d011682016040523d82523d6000602084013e6105f2565b606091505b509150915061060286838361060c565b9695505050505050565b6060826106215761061c8261069b565b610238565b8151158015610645575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610694576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610574565b5080610238565b8051156106ab5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461070457600080fd5b919050565b60008060006060848603121561071e57600080fd5b8335925061072e602085016106e0565b915061073c604085016106e0565b90509250925092565b6000806000838503604081121561075b57600080fd5b602081121561076957600080fd5b50839250602084013567ffffffffffffffff81111561078757600080fd5b8401601f8101861361079857600080fd5b803567ffffffffffffffff8111156107af57600080fd5b8660208284010111156107c157600080fd5b939660209190910195509293505050565b60005b838110156107ed5781810151838201526020016107d5565b50506000910152565b6000815180845261080e8160208601602086016107d2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061023860208301846107f6565b60006020828403121561086557600080fd5b813567ffffffffffffffff81111561087c57600080fd5b82016080818503121561023857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156109045761090461088e565b604052919050565b600082601f83011261091d57600080fd5b813567ffffffffffffffff8111156109375761093761088e565b61096860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108bd565b81815284602083860101111561097d57600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106dd57600080fd5b80356107048161099a565b6000806000606084860312156109c857600080fd5b833567ffffffffffffffff8111156109df57600080fd5b6109eb8682870161090c565b935050602084013591506040840135610a038161099a565b809150509250925092565b600067ffffffffffffffff821115610a2857610a2861088e565b5060051b60200190565b600082601f830112610a4357600080fd5b8135610a56610a5182610a0e565b6108bd565b8082825260208201915060208360051b860101925085831115610a7857600080fd5b602085015b83811015610a95578035835260209283019201610a7d565b5095945050505050565b600080600060608486031215610ab457600080fd5b833567ffffffffffffffff811115610acb57600080fd5b8401601f81018613610adc57600080fd5b8035610aea610a5182610a0e565b8082825260208201915060208360051b850101925088831115610b0c57600080fd5b602084015b83811015610b4e57803567ffffffffffffffff811115610b3057600080fd5b610b3f8b60208389010161090c565b84525060209283019201610b11565b509550505050602084013567ffffffffffffffff811115610b6e57600080fd5b610b7a86828701610a32565b92505061073c604085016109a8565b600060208284031215610b9b57600080fd5b610238826106e0565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff84168152604060208201526000610c1d604083018486610ba4565b95945050505050565b600082610c5c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c9f836106e0565b16604082015273ffffffffffffffffffffffffffffffffffffffff610cc6602084016106e0565b166060820152600080604084013590508060808401525060608301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610d1257600080fd5b830160208101903567ffffffffffffffff811115610d2f57600080fd5b803603821315610d3e57600080fd5b608060a085015261060260c085018284610ba4565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d8860a08301866107f6565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610dd3578151865260209586019590910190600101610db5565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e70577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e5b8583516107f6565b94506020938401939190910190600101610e21565b505050508281036040840152610e868186610da1565b915050610c1d606083018415159052565b600060208284031215610ea957600080fd5b81516102388161099a565b60008251610ec68184602087016107d2565b919091019291505056fea2646970667358221220a40191c0a0256363e6edb7673accb387b7a3597d9a76c64faccadc4ce57c234664736f6c634300081a0033a264697066735822122049489f9b6e180d3b87cffdcbd0972d5a1b5d493c6e8e7b2b32bd9876e54fa9cc64736f6c634300081a0033", } // ERC20CustodyTestABI is the input ABI used to generate the binding from. @@ -879,6 +879,27 @@ func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestDepositLegacyFai return _ERC20CustodyTest.Contract.TestDepositLegacyFailsIfTokenNotWhitelisted(&_ERC20CustodyTest.TransactOpts) } +// TestForwardCallOnRevertThroughCustodyNotAllowedWithArbitraryCall is a paid mutator transaction binding the contract method 0x9319ae1b. +// +// Solidity: function testForwardCallOnRevertThroughCustodyNotAllowedWithArbitraryCall() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestForwardCallOnRevertThroughCustodyNotAllowedWithArbitraryCall(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testForwardCallOnRevertThroughCustodyNotAllowedWithArbitraryCall") +} + +// TestForwardCallOnRevertThroughCustodyNotAllowedWithArbitraryCall is a paid mutator transaction binding the contract method 0x9319ae1b. +// +// Solidity: function testForwardCallOnRevertThroughCustodyNotAllowedWithArbitraryCall() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestForwardCallOnRevertThroughCustodyNotAllowedWithArbitraryCall() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallOnRevertThroughCustodyNotAllowedWithArbitraryCall(&_ERC20CustodyTest.TransactOpts) +} + +// TestForwardCallOnRevertThroughCustodyNotAllowedWithArbitraryCall is a paid mutator transaction binding the contract method 0x9319ae1b. +// +// Solidity: function testForwardCallOnRevertThroughCustodyNotAllowedWithArbitraryCall() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestForwardCallOnRevertThroughCustodyNotAllowedWithArbitraryCall() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallOnRevertThroughCustodyNotAllowedWithArbitraryCall(&_ERC20CustodyTest.TransactOpts) +} + // TestForwardCallToReceiveERC20PartialThroughCustody is a paid mutator transaction binding the contract method 0xfb176c12. // // Solidity: function testForwardCallToReceiveERC20PartialThroughCustody() returns() @@ -1068,6 +1089,48 @@ func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestForwardCallToRec return _ERC20CustodyTest.Contract.TestForwardCallToReceiveNoParamsThroughCustody(&_ERC20CustodyTest.TransactOpts) } +// TestForwardCallToReceiveOnCallThroughCustody is a paid mutator transaction binding the contract method 0x3aa1298f. +// +// Solidity: function testForwardCallToReceiveOnCallThroughCustody() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestForwardCallToReceiveOnCallThroughCustody(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testForwardCallToReceiveOnCallThroughCustody") +} + +// TestForwardCallToReceiveOnCallThroughCustody is a paid mutator transaction binding the contract method 0x3aa1298f. +// +// Solidity: function testForwardCallToReceiveOnCallThroughCustody() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestForwardCallToReceiveOnCallThroughCustody() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallToReceiveOnCallThroughCustody(&_ERC20CustodyTest.TransactOpts) +} + +// TestForwardCallToReceiveOnCallThroughCustody is a paid mutator transaction binding the contract method 0x3aa1298f. +// +// Solidity: function testForwardCallToReceiveOnCallThroughCustody() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestForwardCallToReceiveOnCallThroughCustody() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallToReceiveOnCallThroughCustody(&_ERC20CustodyTest.TransactOpts) +} + +// TestForwardCallToReceiveOnCallThroughCustodyNotAllowedWithArbitraryCall is a paid mutator transaction binding the contract method 0xc9ea7aa5. +// +// Solidity: function testForwardCallToReceiveOnCallThroughCustodyNotAllowedWithArbitraryCall() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactor) TestForwardCallToReceiveOnCallThroughCustodyNotAllowedWithArbitraryCall(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ERC20CustodyTest.contract.Transact(opts, "testForwardCallToReceiveOnCallThroughCustodyNotAllowedWithArbitraryCall") +} + +// TestForwardCallToReceiveOnCallThroughCustodyNotAllowedWithArbitraryCall is a paid mutator transaction binding the contract method 0xc9ea7aa5. +// +// Solidity: function testForwardCallToReceiveOnCallThroughCustodyNotAllowedWithArbitraryCall() returns() +func (_ERC20CustodyTest *ERC20CustodyTestSession) TestForwardCallToReceiveOnCallThroughCustodyNotAllowedWithArbitraryCall() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallToReceiveOnCallThroughCustodyNotAllowedWithArbitraryCall(&_ERC20CustodyTest.TransactOpts) +} + +// TestForwardCallToReceiveOnCallThroughCustodyNotAllowedWithArbitraryCall is a paid mutator transaction binding the contract method 0xc9ea7aa5. +// +// Solidity: function testForwardCallToReceiveOnCallThroughCustodyNotAllowedWithArbitraryCall() returns() +func (_ERC20CustodyTest *ERC20CustodyTestTransactorSession) TestForwardCallToReceiveOnCallThroughCustodyNotAllowedWithArbitraryCall() (*types.Transaction, error) { + return _ERC20CustodyTest.Contract.TestForwardCallToReceiveOnCallThroughCustodyNotAllowedWithArbitraryCall(&_ERC20CustodyTest.TransactOpts) +} + // TestTSSUpgrade is a paid mutator transaction binding the contract method 0x52ff5939. // // Solidity: function testTSSUpgrade() returns() @@ -2704,12 +2767,14 @@ func (it *ERC20CustodyTestReceivedOnCallIterator) Close() error { // ERC20CustodyTestReceivedOnCall represents a ReceivedOnCall event raised by the ERC20CustodyTest contract. type ERC20CustodyTestReceivedOnCall struct { - Raw types.Log // Blockchain specific contextual infos + Sender common.Address + Message []byte + Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedOnCall is a free log retrieval operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// FilterReceivedOnCall is a free log retrieval operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterReceivedOnCall(opts *bind.FilterOpts) (*ERC20CustodyTestReceivedOnCallIterator, error) { logs, sub, err := _ERC20CustodyTest.contract.FilterLogs(opts, "ReceivedOnCall") @@ -2719,9 +2784,9 @@ func (_ERC20CustodyTest *ERC20CustodyTestFilterer) FilterReceivedOnCall(opts *bi return &ERC20CustodyTestReceivedOnCallIterator{contract: _ERC20CustodyTest.contract, event: "ReceivedOnCall", logs: logs, sub: sub}, nil } -// WatchReceivedOnCall is a free log subscription operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// WatchReceivedOnCall is a free log subscription operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchReceivedOnCall(opts *bind.WatchOpts, sink chan<- *ERC20CustodyTestReceivedOnCall) (event.Subscription, error) { logs, sub, err := _ERC20CustodyTest.contract.WatchLogs(opts, "ReceivedOnCall") @@ -2756,9 +2821,9 @@ func (_ERC20CustodyTest *ERC20CustodyTestFilterer) WatchReceivedOnCall(opts *bin }), nil } -// ParseReceivedOnCall is a log parse operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// ParseReceivedOnCall is a log parse operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_ERC20CustodyTest *ERC20CustodyTestFilterer) ParseReceivedOnCall(log types.Log) (*ERC20CustodyTestReceivedOnCall, error) { event := new(ERC20CustodyTestReceivedOnCall) if err := _ERC20CustodyTest.contract.UnpackLog(event, "ReceivedOnCall", log); err != nil { diff --git a/v2/pkg/erc20custodyupgradetest.sol/erc20custodyupgradetest.go b/v2/pkg/erc20custodyupgradetest.sol/erc20custodyupgradetest.go index 6e337869..16539718 100644 --- a/v2/pkg/erc20custodyupgradetest.sol/erc20custodyupgradetest.go +++ b/v2/pkg/erc20custodyupgradetest.sol/erc20custodyupgradetest.go @@ -29,6 +29,11 @@ var ( _ = abi.ConvertType ) +// MessageContext is an auto generated low-level Go binding around an user-defined struct. +type MessageContext struct { + Sender common.Address +} + // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Sender common.Address @@ -39,8 +44,8 @@ type RevertContext struct { // ERC20CustodyUpgradeTestMetaData contains all meta data concerning the ERC20CustodyUpgradeTest contract. var ERC20CustodyUpgradeTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WHITELISTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setSupportsLegacy\",\"inputs\":[{\"name\":\"_supportsLegacy\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"supportsLegacy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unwhitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"whitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelisted\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedCustodyTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyMethodsNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a060405230608052348015601357600080fd5b5060805161295861003d60003960008181611928015281816119510152611b2701526129586000f3fe6080604052600436106101c25760003560e01c806385f438c1116100f7578063ad3cb1cc11610095578063d9caed1211610064578063d9caed12146105f6578063e609055e14610616578063e63ab1e914610636578063eab103df1461066a57600080fd5b8063ad3cb1cc14610530578063c0c53b8b14610586578063d547741f146105a6578063d936547e146105c657600080fd5b806399a3c356116100d157806399a3c356146104bb5780639a590427146104db5780639b19251a146104fb578063a217fddf1461051b57600080fd5b806385f438c11461040257806391d1485414610436578063950837aa1461049b57600080fd5b80633f4ba83a11610164578063570618e11161013e578063570618e1146103625780635b112591146103965780635c975abb146103b65780638456cb59146103ed57600080fd5b80633f4ba83a146103255780634f1ef2861461033a57806352d1902d1461034d57600080fd5b8063248a9ca3116101a0578063248a9ca314610256578063252f07bf146102b35780632f2ff15d146102e557806336568abe1461030557600080fd5b806301ffc9a7146101c7578063116191b6146101fc57806321fc65f214610234575b600080fd5b3480156101d357600080fd5b506101e76101e236600461216e565b61068a565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b5060005461021c906001600160a01b031681565b6040516001600160a01b0390911681526020016101f3565b34801561024057600080fd5b5061025461024f36600461220e565b610723565b005b34801561026257600080fd5b506102a5610271366004612281565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101f3565b3480156102bf57600080fd5b506002546101e79074010000000000000000000000000000000000000000900460ff1681565b3480156102f157600080fd5b5061025461030036600461229a565b6108cc565b34801561031157600080fd5b5061025461032036600461229a565b610916565b34801561033157600080fd5b50610254610967565b6102546103483660046122f9565b61099c565b34801561035957600080fd5b506102a56109bb565b34801561036e57600080fd5b506102a57f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b3480156103a257600080fd5b5060025461021c906001600160a01b031681565b3480156103c257600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101e7565b3480156103f957600080fd5b506102546109ea565b34801561040e57600080fd5b506102a57f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561044257600080fd5b506101e761045136600461229a565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104a757600080fd5b506102546104b6366004612402565b610a1c565b3480156104c757600080fd5b506102546104d636600461241f565b610ba1565b3480156104e757600080fd5b506102546104f6366004612402565b610d4f565b34801561050757600080fd5b50610254610516366004612402565b610e03565b34801561052757600080fd5b506102a5600081565b34801561053c57600080fd5b506105796040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101f391906124e6565b34801561059257600080fd5b506102546105a1366004612537565b610ebd565b3480156105b257600080fd5b506102546105c136600461229a565b6111b7565b3480156105d257600080fd5b506101e76105e1366004612402565b60016020526000908152604090205460ff1681565b34801561060257600080fd5b50610254610611366004612582565b6111fb565b34801561062257600080fd5b506102546106313660046125c3565b611312565b34801561064257600080fd5b506102a57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561067657600080fd5b50610254610685366004612662565b61155d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061071d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61072b6115b3565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461075581611634565b61075d61163e565b6001600160a01b03851660009081526001602052604090205460ff166107af576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546107c9906001600160a01b0387811691168661169c565b6000546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690635131ab599061081a9088908a908990899089906004016126c8565b600060405180830381600087803b15801561083457600080fd5b505af1158015610848573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d58686866040516108939392919061270b565b60405180910390a3506108c560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461090681611634565b6109108383611736565b50505050565b6001600160a01b0381163314610958576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109628282611805565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61099181611634565b6109996118ab565b50565b6109a461191d565b6109ad826119ed565b6109b782826119f8565b5050565b60006109c5611b1c565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1481611634565b610999611b7e565b6000610a2781611634565b6001600160a01b038216610a67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610a9e907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b0316611805565b50600254610ad6907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b0316611805565b50610b017f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483611736565b50610b2c7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a83611736565b50600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040805182815260208101929092527f4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6910160405180910390a15050565b610ba96115b3565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610bd381611634565b610bdb61163e565b6001600160a01b03861660009081526001602052604090205460ff16610c2d576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610c47906001600160a01b0388811691168761169c565b6000546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063aa0c0fc190610c9a9089908b908a908a908a908a906004016127da565b600060405180830381600087803b158015610cb457600080fd5b505af1158015610cc8573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f7b53ec10a80164e60591c43d9c222e9354886981b880a3fba19c9ceb77fb972187878787604051610d159493929190612831565b60405180910390a350610d4760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610d7981611634565b6001600160a01b038216610db9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260016020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610e2d81611634565b6001600160a01b038216610e6d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000818152600160208190526040808320805460ff1916909217909155517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610f085750825b905060008267ffffffffffffffff166001148015610f255750303b155b905081158015610f33575080155b15610f6a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610fcb5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0388161580610fe857506001600160a01b038716155b80610ffa57506001600160a01b038616155b15611031576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611039611bd9565b611041611be1565b611049611bd9565b611051611bf1565b600080546001600160a01b03808b167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617835560028054918b169190921617905561109f9087611736565b506110ca7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611736565b506110f57f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e488611736565b506111207f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a87611736565b5061114b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a88611736565b5083156111ad5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111f181611634565b6109108383611805565b6112036115b3565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461122d81611634565b61123561163e565b6001600160a01b03831660009081526001602052604090205460ff16611287576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61129b6001600160a01b038416858461169c565b826001600160a01b0316846001600160a01b03167fd4dabfe72081670cc78f2ebda8e2eddaf3feebde6288dcb8fe673b3dc201b5a4846040516112e091815260200190565b60405180910390a35061096260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61131a6115b3565b61132261163e565b60025474010000000000000000000000000000000000000000900460ff16611376576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526001602052604090205460ff166113c8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611428573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144c919061285d565b90506114636001600160a01b038616333087611c01565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa1580156114ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150e919061285d565b6115189190612876565b878760405161152b9594939291906128b0565b60405180910390a250610d4760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b600061156881611634565b506002805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161162e576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6109998133611c3a565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561169a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261096291859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611cc7565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166117fb576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556117b13390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061071d565b600091505061071d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156117fb576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061071d565b6118b3611d43565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806119b657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166119aa7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561169a576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109b781611634565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a70575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611a6d9181019061285d565b60015b611ab6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611b12576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611aad565b6109628383611d9e565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461169a576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b8661163e565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336118ff565b61169a611df4565b611be9611df4565b61169a611e5b565b611bf9611df4565b61169a611e63565b6040516001600160a01b0384811660248301528381166044830152606482018390526109109186918216906323b872dd906084016116c9565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166109b7576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611aad565b6000611cdc6001600160a01b03841683611e96565b90508051600014158015611d01575080806020019051810190611cff91906128e9565b155b15610962576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611aad565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661169a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611da782611eab565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611dec576109628282611f53565b6109b7611fc9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661169a576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611710611df4565b611e6b611df4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff19169055565b6060611ea483836000612001565b9392505050565b806001600160a01b03163b600003611efa576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611aad565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611f709190612906565b600060405180830381855af49150503d8060008114611fab576040519150601f19603f3d011682016040523d82523d6000602084013e611fb0565b606091505b5091509150611fc08583836120b7565b95945050505050565b341561169a576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608147101561203f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611aad565b600080856001600160a01b0316848660405161205b9190612906565b60006040518083038185875af1925050503d8060008114612098576040519150601f19603f3d011682016040523d82523d6000602084013e61209d565b606091505b50915091506120ad8683836120b7565b9695505050505050565b6060826120cc576120c78261212c565b611ea4565b81511580156120e357506001600160a01b0384163b155b15612125576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611aad565b5080611ea4565b80511561213c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561218057600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611ea457600080fd5b6001600160a01b038116811461099957600080fd5b60008083601f8401126121d757600080fd5b50813567ffffffffffffffff8111156121ef57600080fd5b60208301915083602082850101111561220757600080fd5b9250929050565b60008060008060006080868803121561222657600080fd5b8535612231816121b0565b94506020860135612241816121b0565b935060408601359250606086013567ffffffffffffffff81111561226457600080fd5b612270888289016121c5565b969995985093965092949392505050565b60006020828403121561229357600080fd5b5035919050565b600080604083850312156122ad57600080fd5b8235915060208301356122bf816121b0565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561230c57600080fd5b8235612317816121b0565b9150602083013567ffffffffffffffff81111561233357600080fd5b8301601f8101851361234457600080fd5b803567ffffffffffffffff81111561235e5761235e6122ca565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156123ca576123ca6122ca565b6040528181528282016020018710156123e257600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561241457600080fd5b8135611ea4816121b0565b60008060008060008060a0878903121561243857600080fd5b8635612443816121b0565b95506020870135612453816121b0565b945060408701359350606087013567ffffffffffffffff81111561247657600080fd5b61248289828a016121c5565b909450925050608087013567ffffffffffffffff8111156124a257600080fd5b87016080818a0312156124b457600080fd5b809150509295509295509295565b60005b838110156124dd5781810151838201526020016124c5565b50506000910152565b60208152600082518060208401526125058160408501602087016124c2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008060006060848603121561254c57600080fd5b8335612557816121b0565b92506020840135612567816121b0565b91506040840135612577816121b0565b809150509250925092565b60008060006060848603121561259757600080fd5b83356125a2816121b0565b925060208401356125b2816121b0565b929592945050506040919091013590565b600080600080600080608087890312156125dc57600080fd5b863567ffffffffffffffff8111156125f357600080fd5b6125ff89828a016121c5565b9097509550506020870135612613816121b0565b935060408701359250606087013567ffffffffffffffff81111561263657600080fd5b61264289828a016121c5565b979a9699509497509295939492505050565b801515811461099957600080fd5b60006020828403121561267457600080fd5b8135611ea481612654565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061270060808301848661267f565b979650505050505050565b838152604060208201526000611fc060408301848661267f565b60008135612732816121b0565b6001600160a01b03168352602082013561274b816121b0565b6001600160a01b03166020840152604082810135908401526060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261279957600080fd5b820160208101903567ffffffffffffffff8111156127b657600080fd5b8036038213156127c557600080fd5b60806060860152611fc060808601828461267f565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061281260a08301858761267f565b82810360808401526128248185612725565b9998505050505050505050565b84815260606020820152600061284b60608301858761267f565b82810360408401526127008185612725565b60006020828403121561286f57600080fd5b5051919050565b8181038181111561071d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006128c460608301878961267f565b85602084015282810360408401526128dd81858761267f565b98975050505050505050565b6000602082840312156128fb57600080fd5b8151611ea481612654565b600082516129188184602087016124c2565b919091019291505056fea26469706673582212209677fb20584c2da2d9821bbbc7955ade138c175013e15534e533f173d0e2389c64736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WHITELISTER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setSupportsLegacy\",\"inputs\":[{\"name\":\"_supportsLegacy\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"supportsLegacy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unwhitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"whitelist\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelisted\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"messageContext\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedCustodyTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyMethodsNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a060405230608052348015601357600080fd5b5060805161296f61003d600039600081816117b1015281816117da01526119b2015261296f6000f3fe6080604052600436106101c25760003560e01c806391d14854116100f7578063ad3cb1cc11610095578063d9caed1211610064578063d9caed12146105f6578063e609055e14610616578063e63ab1e914610636578063eab103df1461066a57600080fd5b8063ad3cb1cc14610530578063c0c53b8b14610586578063d547741f146105a6578063d936547e146105c657600080fd5b80639a590427116100d15780639a590427146104bb5780639b19251a146104db578063a217fddf146104fb578063ad0818521461051057600080fd5b806391d1485414610416578063950837aa1461047b57806399a3c3561461049b57600080fd5b80634f1ef286116101645780635b1125911161013e5780635b112591146103765780635c975abb146103965780638456cb59146103cd57806385f438c1146103e257600080fd5b80634f1ef2861461031a57806352d1902d1461032d578063570618e11461034257600080fd5b8063252f07bf116101a0578063252f07bf146102915780632f2ff15d146102c357806336568abe146102e55780633f4ba83a1461030557600080fd5b806301ffc9a7146101c7578063116191b6146101fc578063248a9ca314610234575b600080fd5b3480156101d357600080fd5b506101e76101e2366004612170565b61068a565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b5060005461021c906001600160a01b031681565b6040516001600160a01b0390911681526020016101f3565b34801561024057600080fd5b5061028361024f3660046121b2565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101f3565b34801561029d57600080fd5b506002546101e79074010000000000000000000000000000000000000000900460ff1681565b3480156102cf57600080fd5b506102e36102de3660046121e0565b610723565b005b3480156102f157600080fd5b506102e36103003660046121e0565b61076d565b34801561031157600080fd5b506102e36107be565b6102e361032836600461223f565b6107f3565b34801561033957600080fd5b50610283610812565b34801561034e57600080fd5b506102837f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b34801561038257600080fd5b5060025461021c906001600160a01b031681565b3480156103a257600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101e7565b3480156103d957600080fd5b506102e3610841565b3480156103ee57600080fd5b506102837f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561042257600080fd5b506101e76104313660046121e0565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561048757600080fd5b506102e3610496366004612348565b610873565b3480156104a757600080fd5b506102e36104b63660046123ae565b610a06565b3480156104c757600080fd5b506102e36104d6366004612348565b610bb4565b3480156104e757600080fd5b506102e36104f6366004612348565b610c68565b34801561050757600080fd5b50610283600081565b34801561051c57600080fd5b506102e361052b366004612451565b610d22565b34801561053c57600080fd5b506105796040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101f39190612500565b34801561059257600080fd5b506102e36105a1366004612551565b610e94565b3480156105b257600080fd5b506102e36105c13660046121e0565b6111b9565b3480156105d257600080fd5b506101e76105e1366004612348565b60016020526000908152604090205460ff1681565b34801561060257600080fd5b506102e361061136600461259c565b6111fd565b34801561062257600080fd5b506102e36106313660046125dd565b611314565b34801561064257600080fd5b506102837f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561067657600080fd5b506102e361068536600461265e565b61155f565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061071d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461075d816115b5565b61076783836115bf565b50505050565b6001600160a01b03811633146107af576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b9828261168e565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107e8816115b5565b6107f0611734565b50565b6107fb6117a6565b61080482611878565b61080e8282611883565b5050565b600061081c6119a7565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61086b816115b5565b6107f0611a09565b600061087e816115b5565b6001600160a01b0382166108be576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546108f5907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b031661168e565b5060025461092d907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b031661168e565b506109587f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836115bf565b506109837f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a836115bf565b50600254604080516001600160a01b03928316815291841660208301527f4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b610a0e611a64565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a38816115b5565b610a40611ae5565b6001600160a01b03861660009081526001602052604090205460ff16610a92576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610aac906001600160a01b03888116911687611b41565b6000546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063aa0c0fc190610aff9089908b908a908a908a908a90600401612779565b600060405180830381600087803b158015610b1957600080fd5b505af1158015610b2d573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f7b53ec10a80164e60591c43d9c222e9354886981b880a3fba19c9ceb77fb972187878787604051610b7a94939291906127d0565b60405180910390a350610bac60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610bde816115b5565b6001600160a01b038216610c1e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260016020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610c92816115b5565b6001600160a01b038216610cd2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000818152600160208190526040808320805460ff1916909217909155517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b610d2a611a64565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d54816115b5565b610d5c611ae5565b6001600160a01b03851660009081526001602052604090205460ff16610dae576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610dc8906001600160a01b03878116911686611b41565b6000546040517f7bbe9afa0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690637bbe9afa90610e1b908a9089908b908a908a908a90600401612807565b600060405180830381600087803b158015610e3557600080fd5b505af1158015610e49573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d5868686604051610b7a93929190612866565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610edf5750825b905060008267ffffffffffffffff166001148015610efc5750303b155b905081158015610f0a575080155b15610f41576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610fa25784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0388161580610fbf57506001600160a01b038716155b80610fd157506001600160a01b038616155b15611008576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611010611bdb565b611018611be3565b611020611bdb565b611028611bf3565b600080546001600160a01b03808b167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617835560028054918b169190921617905561107690876115bf565b506110a17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876115bf565b506110cc7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a886115bf565b506110f77f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4886115bf565b506111227f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a876115bf565b5061114d7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a886115bf565b5083156111af5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111f3816115b5565b610767838361168e565b611205611a64565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461122f816115b5565b611237611ae5565b6001600160a01b03831660009081526001602052604090205460ff16611289576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61129d6001600160a01b0384168584611b41565b826001600160a01b0316846001600160a01b03167fd4dabfe72081670cc78f2ebda8e2eddaf3feebde6288dcb8fe673b3dc201b5a4846040516112e291815260200190565b60405180910390a3506107b960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61131c611a64565b611324611ae5565b60025474010000000000000000000000000000000000000000900460ff16611378576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526001602052604090205460ff166113ca576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa15801561142a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144e9190612880565b90506114656001600160a01b038616333087611c03565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa1580156114ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115109190612880565b61151a9190612899565b878760405161152d9594939291906128d3565b60405180910390a250610bac60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b600061156a816115b5565b506002805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6107f08133611c3c565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611684576000848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561163a3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061071d565b600091505061071d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611684576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061071d565b61173c611cc9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061183f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166118337f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611876576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600061080e816115b5565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156118fb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526118f891810190612880565b60015b611941576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461199d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611938565b6107b98383611d24565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611876576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a11611ae5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611788565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611adf576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611876576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038381166024830152604482018390526107b991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611d7a565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611876611df6565b611beb611df6565b611876611e5d565b611bfb611df6565b611876611e65565b6040516001600160a01b0384811660248301528381166044830152606482018390526107679186918216906323b872dd90608401611b6e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff1661080e576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611938565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611876576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d2d82611e98565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611d72576107b98282611f40565b61080e611fb6565b6000611d8f6001600160a01b03841683611fee565b90508051600014158015611db4575080806020019051810190611db29190612900565b155b156107b9576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611938565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611876576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bb5611df6565b611e6d611df6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff19169055565b806001600160a01b03163b600003611ee7576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611938565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611f5d919061291d565b600060405180830381855af49150503d8060008114611f98576040519150601f19603f3d011682016040523d82523d6000602084013e611f9d565b606091505b5091509150611fad858383612003565b95945050505050565b3415611876576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611ffc83836000612078565b9392505050565b606082612018576120138261212e565b611ffc565b815115801561202f57506001600160a01b0384163b155b15612071576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611938565b5092915050565b6060814710156120b6576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611938565b600080856001600160a01b031684866040516120d2919061291d565b60006040518083038185875af1925050503d806000811461210f576040519150601f19603f3d011682016040523d82523d6000602084013e612114565b606091505b5091509150612124868383612003565b9695505050505050565b80511561213e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561218257600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611ffc57600080fd5b6000602082840312156121c457600080fd5b5035919050565b6001600160a01b03811681146107f057600080fd5b600080604083850312156121f357600080fd5b823591506020830135612205816121cb565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561225257600080fd5b823561225d816121cb565b9150602083013567ffffffffffffffff81111561227957600080fd5b8301601f8101851361228a57600080fd5b803567ffffffffffffffff8111156122a4576122a4612210565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561231057612310612210565b60405281815282820160200187101561232857600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561235a57600080fd5b8135611ffc816121cb565b60008083601f84011261237757600080fd5b50813567ffffffffffffffff81111561238f57600080fd5b6020830191508360208285010111156123a757600080fd5b9250929050565b60008060008060008060a087890312156123c757600080fd5b86356123d2816121cb565b955060208701356123e2816121cb565b945060408701359350606087013567ffffffffffffffff81111561240557600080fd5b61241189828a01612365565b909450925050608087013567ffffffffffffffff81111561243157600080fd5b87016080818a03121561244357600080fd5b809150509295509295509295565b60008060008060008086880360a081121561246b57600080fd5b602081121561247957600080fd5b50869550602087013561248b816121cb565b9450604087013561249b816121cb565b935060608701359250608087013567ffffffffffffffff8111156124be57600080fd5b6124ca89828a01612365565b979a9699509497509295939492505050565b60005b838110156124f75781810151838201526020016124df565b50506000910152565b602081526000825180602084015261251f8160408501602087016124dc565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008060006060848603121561256657600080fd5b8335612571816121cb565b92506020840135612581816121cb565b91506040840135612591816121cb565b809150509250925092565b6000806000606084860312156125b157600080fd5b83356125bc816121cb565b925060208401356125cc816121cb565b929592945050506040919091013590565b600080600080600080608087890312156125f657600080fd5b863567ffffffffffffffff81111561260d57600080fd5b61261989828a01612365565b909750955050602087013561262d816121cb565b935060408701359250606087013567ffffffffffffffff8111156124be57600080fd5b80151581146107f057600080fd5b60006020828403121561267057600080fd5b8135611ffc81612650565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600081356126d1816121cb565b6001600160a01b0316835260208201356126ea816121cb565b6001600160a01b03166020840152604082810135908401526060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261273857600080fd5b820160208101903567ffffffffffffffff81111561275557600080fd5b80360382131561276457600080fd5b60806060860152611fad60808601828461267b565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006127b160a08301858761267b565b82810360808401526127c381856126c4565b9998505050505050505050565b8481526060602082015260006127ea60608301858761267b565b82810360408401526127fc81856126c4565b979650505050505050565b60008735612814816121cb565b6001600160a01b0381168352506001600160a01b03871660208301526001600160a01b038616604083015284606083015260a0608083015261285a60a08301848661267b565b98975050505050505050565b838152604060208201526000611fad60408301848661267b565b60006020828403121561289257600080fd5b5051919050565b8181038181111561071d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006128e760608301878961267b565b856020840152828103604084015261285a81858761267b565b60006020828403121561291257600080fd5b8151611ffc81612650565b6000825161292f8184602087016124dc565b919091019291505056fea264697066735822122082fc33619f8a24e2eb588ffede50fc6f7277dd5d48bbf779d9fb55b026629eed64736f6c634300081a0033", } // ERC20CustodyUpgradeTestABI is the input ABI used to generate the binding from. @@ -917,25 +922,25 @@ func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactorSession) Withdr return _ERC20CustodyUpgradeTest.Contract.Withdraw(&_ERC20CustodyUpgradeTest.TransactOpts, to, token, amount) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x21fc65f2. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0xad081852. // -// Solidity: function withdrawAndCall(address to, address token, uint256 amount, bytes data) returns() -func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactor) WithdrawAndCall(opts *bind.TransactOpts, to common.Address, token common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _ERC20CustodyUpgradeTest.contract.Transact(opts, "withdrawAndCall", to, token, amount, data) +// Solidity: function withdrawAndCall((address) messageContext, address to, address token, uint256 amount, bytes data) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactor) WithdrawAndCall(opts *bind.TransactOpts, messageContext MessageContext, to common.Address, token common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.contract.Transact(opts, "withdrawAndCall", messageContext, to, token, amount, data) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x21fc65f2. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0xad081852. // -// Solidity: function withdrawAndCall(address to, address token, uint256 amount, bytes data) returns() -func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) WithdrawAndCall(to common.Address, token common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _ERC20CustodyUpgradeTest.Contract.WithdrawAndCall(&_ERC20CustodyUpgradeTest.TransactOpts, to, token, amount, data) +// Solidity: function withdrawAndCall((address) messageContext, address to, address token, uint256 amount, bytes data) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestSession) WithdrawAndCall(messageContext MessageContext, to common.Address, token common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.WithdrawAndCall(&_ERC20CustodyUpgradeTest.TransactOpts, messageContext, to, token, amount, data) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x21fc65f2. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0xad081852. // -// Solidity: function withdrawAndCall(address to, address token, uint256 amount, bytes data) returns() -func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactorSession) WithdrawAndCall(to common.Address, token common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _ERC20CustodyUpgradeTest.Contract.WithdrawAndCall(&_ERC20CustodyUpgradeTest.TransactOpts, to, token, amount, data) +// Solidity: function withdrawAndCall((address) messageContext, address to, address token, uint256 amount, bytes data) returns() +func (_ERC20CustodyUpgradeTest *ERC20CustodyUpgradeTestTransactorSession) WithdrawAndCall(messageContext MessageContext, to common.Address, token common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _ERC20CustodyUpgradeTest.Contract.WithdrawAndCall(&_ERC20CustodyUpgradeTest.TransactOpts, messageContext, to, token, amount, data) } // WithdrawAndRevert is a paid mutator transaction binding the contract method 0x99a3c356. diff --git a/v2/pkg/gatewayevm.sol/gatewayevm.go b/v2/pkg/gatewayevm.sol/gatewayevm.go index db60443b..5036e81f 100644 --- a/v2/pkg/gatewayevm.sol/gatewayevm.go +++ b/v2/pkg/gatewayevm.sol/gatewayevm.go @@ -53,8 +53,8 @@ type RevertOptions struct { // GatewayEVMMetaData contains all meta data concerning the GatewayEVM contract. var GatewayEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_PAYLOAD_SIZE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"messageContext\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZETANotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613b7b6100fd600039600081816123e20152818161240b01526128790152613b7b6000f3fe6080604052600436106102345760003560e01c80635d62c86011610138578063aa0c0fc1116100b0578063cb7ba8e51161007f578063d547741f11610064578063d547741f146106db578063dda79b75146106fb578063e63ab1e91461071b57600080fd5b8063cb7ba8e5146106a8578063d09e3b78146106bb57600080fd5b8063aa0c0fc1146105ff578063ad3cb1cc1461061f578063ae7a3a6f14610668578063c0c53b8b1461068857600080fd5b806391d1485411610107578063a217fddf116100ec578063a217fddf146105a0578063a2ba1934146105b5578063a783c789146105cb57600080fd5b806391d148541461051b578063950837aa1461058057600080fd5b80635d62c860146104ac578063726ac97c146104e0578063744b9b8b146104f35780638456cb591461050657600080fd5b806336568abe116101cb5780635131ab591161019a57806357bec62f1161017f57806357bec62f146104355780635b112591146104555780635c975abb1461047557600080fd5b80635131ab591461040057806352d1902d1461042057600080fd5b806336568abe146103a557806338e22527146103c55780633f4ba83a146103d85780634f1ef286146103ed57600080fd5b80631cff79cd116102075780631cff79cd146102d057806321e093b1146102f0578063248a9ca3146103285780632f2ff15d1461038557600080fd5b806301ffc9a71461023957806310188aef1461026e578063102614b0146102905780631becceb4146102b0575b600080fd5b34801561024557600080fd5b50610259610254366004613060565b61074f565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e6102893660046130be565b6107e8565b005b34801561029c57600080fd5b5061028e6102ab3660046130f1565b6108c3565b3480156102bc57600080fd5b5061028e6102cb3660046131a2565b610a07565b6102e36102de366004613209565b610ad8565b60405161026591906132ac565b3480156102fc57600080fd5b50600354610310906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561033457600080fd5b506103776103433660046132bf565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b34801561039157600080fd5b5061028e6103a03660046132d8565b610b90565b3480156103b157600080fd5b5061028e6103c03660046132d8565b610bd4565b6102e36103d3366004613304565b610c25565b3480156103e457600080fd5b5061028e610d11565b61028e6103fb3660046133f5565b610d46565b34801561040c57600080fd5b5061028e61041b366004613486565b610d65565b34801561042c57600080fd5b50610377611065565b34801561044157600080fd5b50600254610310906001600160a01b031681565b34801561046157600080fd5b50600154610310906001600160a01b031681565b34801561048157600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104b857600080fd5b506103777f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b61028e6104ee3660046134f5565b611094565b61028e6105013660046131a2565b611256565b34801561051257600080fd5b5061028e611425565b34801561052757600080fd5b506102596105363660046132d8565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058c57600080fd5b5061028e61059b3660046130be565b611457565b3480156105ac57600080fd5b50610377600081565b3480156105c157600080fd5b5061037761040081565b3480156105d757600080fd5b506103777f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561060b57600080fd5b5061028e61061a366004613555565b61156e565b34801561062b57600080fd5b506102e36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561067457600080fd5b5061028e6106833660046130be565b611717565b34801561069457600080fd5b5061028e6106a33660046135ed565b6117f2565b61028e6106b6366004613630565b611ab9565b3480156106c757600080fd5b5061028e6106d63660046136a3565b611ca1565b3480156106e757600080fd5b5061028e6106f63660046132d8565b611dec565b34801561070757600080fd5b50600054610310906001600160a01b031681565b34801561072757600080fd5b506103777f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107e257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60006107f381611e30565b6001600160a01b03821661081a5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b03161561085d576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108877f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611e3a565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108cb611f27565b6108d3611f85565b8260000361090d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166109345760405163d92e233d60e01b815260040160405180910390fd5b610400610944606083018361372e565b9050111561097e576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610989338385612006565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8585856040516109d0939291906138ad565b60405180910390a3610a0160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b610a0f611f27565b610a17611f85565b6001600160a01b038416610a3e5760405163d92e233d60e01b815260040160405180910390fd5b610400610a4e606083018361372e565b610a599150846138e3565b1115610a91576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d9748585856040516109d09392919061391d565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b0481611e30565b610b0c611f27565b6001600160a01b038516610b335760405163d92e233d60e01b815260040160405180910390fd5b6000610b4086868661214d565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610b7f93929190613943565b60405180910390a295945050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610bca81611e30565b610a018383611e3a565b6001600160a01b0381163314610c16576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c208282612200565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c5181611e30565b610c59611f27565b610c61611f85565b6001600160a01b038516610c885760405163d92e233d60e01b815260040160405180910390fd5b6060610c96878787876122c4565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610cd593929190613943565b60405180910390a29150610d0860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50949350505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610d3b81611e30565b610d43612347565b50565b610d4e6123d7565b610d57826124a7565b610d6182826124b2565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610d8f81611e30565b610d97611f27565b610d9f611f85565b83600003610dd9576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610e005760405163d92e233d60e01b815260040160405180910390fd5b610e0a86866125b8565b610e40576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610ea8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecc919061395d565b610f02576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f0d85848461214d565b50610f1886866125b8565b610f4e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd2919061397a565b90508015610fe457610fe48782612648565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161102b93929190613943565b60405180910390a35061105d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061106f61286e565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b61109c611f27565b6110a4611f85565b346000036110de576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166111055760405163d92e233d60e01b815260040160405180910390fd5b610400611115606083018361372e565b9050111561114f576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d806000811461119c576040519150601f19603f3d011682016040523d82523d6000602084013e6111a1565b606091505b50509050806111dc576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600086604051611224939291906138ad565b60405180910390a350610d6160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61125e611f27565b611266611f85565b346000036112a0576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166112c75760405163d92e233d60e01b815260040160405180910390fd5b6104006112d7606083018361372e565b6112e29150846138e3565b111561131a576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611367576040519150601f19603f3d011682016040523d82523d6000602084013e61136c565b606091505b50509050806113a7576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008888886040516113f3959493929190613993565b60405180910390a350610a0160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61144f81611e30565b610d436128d0565b600061146281611e30565b6001600160a01b0382166114895760405163d92e233d60e01b815260040160405180910390fd5b6001546114c0907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b0316612200565b506114eb7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83611e3a565b50600154604080516001600160a01b03928316815291841660208301527f3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579910160405180910390a150600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961159881611e30565b6115a0611f27565b6115a8611f85565b846000036115e2576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166116095760405163d92e233d60e01b815260040160405180910390fd5b61161d6001600160a01b0388168787612949565b6040517fc9028a360000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063c9028a3690611662908590600401613a36565b600060405180830381600087803b15801561167c57600080fd5b505af1158015611690573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e035878787876040516116dd9493929190613a49565b60405180910390a361170e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b600061172281611e30565b6001600160a01b0382166117495760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b03161561178c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117b67f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611e3a565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561183d5750825b905060008267ffffffffffffffff16600114801561185a5750303b155b905081158015611868575080155b1561189f576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156119005784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061191d57506001600160a01b038716155b1561193b5760405163d92e233d60e01b815260040160405180910390fd5b6119436129bd565b61194b6129c5565b6119536129bd565b61195b6129d5565b611966600087611e3a565b506119917f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611e3a565b506119bc7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a89611e3a565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a16179055611a1a7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611e3a565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611aaf5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb611ae381611e30565b611aeb611f27565b611af3611f85565b6001600160a01b038516611b1a5760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d8060008114611b67576040519150601f19603f3d011682016040523d82523d6000602084013e611b6c565b606091505b5050905080611ba7576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc9028a360000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063c9028a3690611bec908690600401613a36565b600060405180830381600087803b158015611c0657600080fd5b505af1158015611c1a573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e03534888888604051611c689493929190613a49565b60405180910390a350611c9a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b611ca9611f27565b611cb1611f85565b84600003611ceb576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611d125760405163d92e233d60e01b815260040160405180910390fd5b610400611d22606083018361372e565b611d2d9150846138e3565b1115611d65576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d70338587612006565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8787878787604051611dbb959493929190613993565b60405180910390a361105d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611e2681611e30565b610a018383612200565b610d4381336129e5565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611f1d576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611ed33390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107e2565b60009150506107e2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611f83576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01612000576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b039081169083160361204e576040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156120b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d5919061395d565b61210b576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610c20906001600160a01b038481169186911684612a72565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60606121598383612aab565b600080856001600160a01b0316348686604051612177929190613a80565b60006040518083038185875af1925050503d80600081146121b4576040519150601f19603f3d011682016040523d82523d6000602084013e6121b9565b606091505b5091509150816121f5576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611f1d576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107e2565b6060836001600160a01b031663676cc054348786866040518563ffffffff1660e01b81526004016122f793929190613a90565b60006040518083038185885af1158015612315573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261233e9190810190613abb565b95945050505050565b61234f612bab565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061247057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166124647f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611f83576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d6181611e30565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561250c575060408051601f3d908101601f191682019092526125099181019061397a565b60015b612552576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146125ae576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612549565b610c208383612c06565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612624573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f9919061395d565b6003546001600160a01b0390811690831603612797576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156126ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ee919061395d565b612724576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561278357600080fd5b505af115801561105d573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156127fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281e919061395d565b612854576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610d61906001600160a01b03848116911683612949565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611f83576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128d8611f27565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336123b9565b6040516001600160a01b03838116602483015260448201839052610c2091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612c5c565b611f83612cd8565b6129cd612cd8565b611f83612d3f565b6129dd612cd8565b611f83612d47565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610d61576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612549565b6040516001600160a01b038481166024830152838116604483015260648201839052610a019186918216906323b872dd90608401612976565b60048110610d615781357f98933fac000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601612b30576040517fed69977500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f36fd75ca000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610c20576040517ff3459a9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611f83576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c0f82612d98565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612c5457610c208282612e40565b610d61612ead565b6000612c716001600160a01b03841683612ee5565b90508051600014158015612c96575080806020019051810190612c94919061395d565b155b15610c20576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612549565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611f83576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612127612cd8565b612d4f612cd8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612de7576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612549565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612e5d9190613b29565b600060405180830381855af49150503d8060008114612e98576040519150601f19603f3d011682016040523d82523d6000602084013e612e9d565b606091505b509150915061233e858383612ef3565b3415611f83576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606121f983836000612f68565b606082612f0857612f038261301e565b6121f9565b8151158015612f1f57506001600160a01b0384163b155b15612f61576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612549565b50806121f9565b606081471015612fa6576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401612549565b600080856001600160a01b03168486604051612fc29190613b29565b60006040518083038185875af1925050503d8060008114612fff576040519150601f19603f3d011682016040523d82523d6000602084013e613004565b606091505b5091509150613014868383612ef3565b9695505050505050565b80511561302e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561307257600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146121f957600080fd5b80356001600160a01b03811681146130b957600080fd5b919050565b6000602082840312156130d057600080fd5b6121f9826130a2565b600060a082840312156130eb57600080fd5b50919050565b6000806000806080858703121561310757600080fd5b613110856130a2565b935060208501359250613125604086016130a2565b9150606085013567ffffffffffffffff81111561314157600080fd5b61314d878288016130d9565b91505092959194509250565b60008083601f84011261316b57600080fd5b50813567ffffffffffffffff81111561318357600080fd5b60208301915083602082850101111561319b57600080fd5b9250929050565b600080600080606085870312156131b857600080fd5b6131c1856130a2565b9350602085013567ffffffffffffffff8111156131dd57600080fd5b6131e987828801613159565b909450925050604085013567ffffffffffffffff81111561314157600080fd5b60008060006040848603121561321e57600080fd5b613227846130a2565b9250602084013567ffffffffffffffff81111561324357600080fd5b61324f86828701613159565b9497909650939450505050565b60005b8381101561327757818101518382015260200161325f565b50506000910152565b6000815180845261329881602086016020860161325c565b601f01601f19169290920160200192915050565b6020815260006121f96020830184613280565b6000602082840312156132d157600080fd5b5035919050565b600080604083850312156132eb57600080fd5b823591506132fb602084016130a2565b90509250929050565b600080600080848603606081121561331b57600080fd5b602081121561332957600080fd5b50849350613339602086016130a2565b9250604085013567ffffffffffffffff81111561335557600080fd5b61336187828801613159565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156133c5576133c561336d565b604052919050565b600067ffffffffffffffff8211156133e7576133e761336d565b50601f01601f191660200190565b6000806040838503121561340857600080fd5b613411836130a2565b9150602083013567ffffffffffffffff81111561342d57600080fd5b8301601f8101851361343e57600080fd5b803561345161344c826133cd565b61339c565b81815286602083850101111561346657600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561349e57600080fd5b6134a7866130a2565b94506134b5602087016130a2565b935060408601359250606086013567ffffffffffffffff8111156134d857600080fd5b6134e488828901613159565b969995985093965092949392505050565b6000806040838503121561350857600080fd5b613511836130a2565b9150602083013567ffffffffffffffff81111561352d57600080fd5b613539858286016130d9565b9150509250929050565b6000608082840312156130eb57600080fd5b60008060008060008060a0878903121561356e57600080fd5b613577876130a2565b9550613585602088016130a2565b945060408701359350606087013567ffffffffffffffff8111156135a857600080fd5b6135b489828a01613159565b909450925050608087013567ffffffffffffffff8111156135d457600080fd5b6135e089828a01613543565b9150509295509295509295565b60008060006060848603121561360257600080fd5b61360b846130a2565b9250613619602085016130a2565b9150613627604085016130a2565b90509250925092565b6000806000806060858703121561364657600080fd5b61364f856130a2565b9350602085013567ffffffffffffffff81111561366b57600080fd5b61367787828801613159565b909450925050604085013567ffffffffffffffff81111561369757600080fd5b61314d87828801613543565b60008060008060008060a087890312156136bc57600080fd5b6136c5876130a2565b9550602087013594506136da604088016130a2565b9350606087013567ffffffffffffffff8111156136f657600080fd5b61370289828a01613159565b909450925050608087013567ffffffffffffffff81111561372257600080fd5b6135e089828a016130d9565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261376357600080fd5b83018035915067ffffffffffffffff82111561377e57600080fd5b60200191503681900382131561319b57600080fd5b8015158114610d4357600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126137d657600080fd5b830160208101925035905067ffffffffffffffff8111156137f657600080fd5b80360382131561319b57600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b03613841826130a2565b1682526000602082013561385481613793565b151560208401526001600160a01b0361386f604084016130a2565b16604084015261388260608301836137a1565b60a0606086015261389760a086018284613805565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a06060820152600061233e60a0830184613830565b808201808211156107e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b604081526000613931604083018587613805565b82810360208401526130148185613830565b83815260406020820152600061233e604083018486613805565b60006020828403121561396f57600080fd5b81516121f981613793565b60006020828403121561398c57600080fd5b5051919050565b8581526001600160a01b03851660208201526080604082015260006139bc608083018587613805565b82810360608401526139ce8185613830565b98975050505050505050565b6001600160a01b036139eb826130a2565b1682526001600160a01b03613a02602083016130a2565b166020830152604081810135908301526000613a2160608301836137a1565b6080606086015261233e608086018284613805565b6020815260006121f960208301846139da565b848152606060208201526000613a63606083018587613805565b8281036040840152613a7581856139da565b979650505050505050565b8183823760009101908152919050565b6001600160a01b03613aa1856130a2565b16815260406020820152600061233e604083018486613805565b600060208284031215613acd57600080fd5b815167ffffffffffffffff811115613ae457600080fd5b8201601f81018413613af557600080fd5b8051613b0361344c826133cd565b818152856020838501011115613b1857600080fd5b61233e82602083016020860161325c565b60008251613b3b81846020870161325c565b919091019291505056fea26469706673582212201229b7b25024e7ca203b587177014870919846d3750c5162ab31d92af37e129664736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_PAYLOAD_SIZE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"messageContext\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"messageContext\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZETANotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613abe6100fd6000396000818161235c01528181612385015261253d0152613abe6000f3fe6080604052600436106102195760003560e01c8063744b9b8b1161011d578063aa0c0fc1116100b0578063cb7ba8e51161007f578063d547741f11610064578063d547741f146106ad578063dda79b75146106cd578063e63ab1e9146106ed57600080fd5b8063cb7ba8e51461067a578063d09e3b781461068d57600080fd5b8063aa0c0fc1146105d1578063ad3cb1cc146105f1578063ae7a3a6f1461063a578063c0c53b8b1461065a57600080fd5b8063950837aa116100ec578063950837aa14610552578063a217fddf14610572578063a2ba193414610587578063a783c7891461059d57600080fd5b8063744b9b8b146104a55780637bbe9afa146104b85780638456cb59146104d857806391d14854146104ed57600080fd5b806338e22527116101b057806357bec62f1161017f5780635c975abb116101645780635c975abb146104275780635d62c8601461045e578063726ac97c1461049257600080fd5b806357bec62f146103e75780635b1125911461040757600080fd5b806338e225271461038a5780633f4ba83a146103aa5780634f1ef286146103bf57806352d1902d146103d257600080fd5b806321e093b1116101ec57806321e093b1146102b5578063248a9ca3146102ed5780632f2ff15d1461034a57806336568abe1461036a57600080fd5b806301ffc9a71461021e57806310188aef14610253578063102614b0146102755780631becceb414610295575b600080fd5b34801561022a57600080fd5b5061023e610239366004612fda565b610721565b60405190151581526020015b60405180910390f35b34801561025f57600080fd5b5061027361026e366004613038565b6107ba565b005b34801561028157600080fd5b5061027361029036600461306b565b610895565b3480156102a157600080fd5b506102736102b036600461311c565b6109d9565b3480156102c157600080fd5b506003546102d5906001600160a01b031681565b6040516001600160a01b03909116815260200161024a565b3480156102f957600080fd5b5061033c610308366004613183565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161024a565b34801561035657600080fd5b5061027361036536600461319c565b610aaa565b34801561037657600080fd5b5061027361038536600461319c565b610aee565b61039d6103983660046131da565b610b3f565b60405161024a919061328c565b3480156103b657600080fd5b50610273610c5b565b6102736103cd366004613327565b610c90565b3480156103de57600080fd5b5061033c610caf565b3480156103f357600080fd5b506002546102d5906001600160a01b031681565b34801561041357600080fd5b506001546102d5906001600160a01b031681565b34801561043357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661023e565b34801561046a57600080fd5b5061033c7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6102736104a03660046133b8565b610cde565b6102736104b336600461311c565b610ea0565b3480156104c457600080fd5b506102736104d3366004613406565b61106f565b3480156104e457600080fd5b506102736113a0565b3480156104f957600080fd5b5061023e61050836600461319c565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561055e57600080fd5b5061027361056d366004613038565b6113d2565b34801561057e57600080fd5b5061033c600081565b34801561059357600080fd5b5061033c61040081565b3480156105a957600080fd5b5061033c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156105dd57600080fd5b506102736105ec366004613498565b6114e9565b3480156105fd57600080fd5b5061039d6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561064657600080fd5b50610273610655366004613038565b611689565b34801561066657600080fd5b50610273610675366004613530565b611764565b610273610688366004613573565b611a2b565b34801561069957600080fd5b506102736106a83660046135e6565b611c13565b3480156106b957600080fd5b506102736106c836600461319c565b611d66565b3480156106d957600080fd5b506000546102d5906001600160a01b031681565b3480156106f957600080fd5b5061033c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107b457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60006107c581611daa565b6001600160a01b0382166107ec5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b03161561082f576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108597f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611db4565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61089d611ea1565b6108a5611eff565b826000036108df576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166109065760405163d92e233d60e01b815260040160405180910390fd5b6104006109166060830183613671565b90501115610950576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61095b338385611f80565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8585856040516109a2939291906137f0565b60405180910390a36109d360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b6109e1611ea1565b6109e9611eff565b6001600160a01b038416610a105760405163d92e233d60e01b815260040160405180910390fd5b610400610a206060830183613671565b610a2b915084613826565b1115610a63576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d9748585856040516109a293929190613860565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610ae481611daa565b6109d38383611db4565b6001600160a01b0381163314610b30576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b3a82826120c7565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b6b81611daa565b610b73611ea1565b610b7b611eff565b6001600160a01b038516610ba25760405163d92e233d60e01b815260040160405180910390fd5b60606000610bb36020890189613038565b6001600160a01b031603610bd357610bcc86868661218b565b9050610be2565b610bdf8787878761223e565b90505b856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610c1f93929190613886565b60405180910390a29150610c5260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50949350505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c8581611daa565b610c8d6122c1565b50565b610c98612351565b610ca182612421565b610cab828261242c565b5050565b6000610cb9612532565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610ce6611ea1565b610cee611eff565b34600003610d28576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610d4f5760405163d92e233d60e01b815260040160405180910390fd5b610400610d5f6060830183613671565b90501115610d99576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610de6576040519150601f19603f3d011682016040523d82523d6000602084013e610deb565b606091505b5050905080610e26576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600086604051610e6e939291906137f0565b60405180910390a350610cab60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b610ea8611ea1565b610eb0611eff565b34600003610eea576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416610f115760405163d92e233d60e01b815260040160405180910390fd5b610400610f216060830183613671565b610f2c915084613826565b1115610f64576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610fb1576040519150601f19603f3d011682016040523d82523d6000602084013e610fb6565b606091505b5050905080610ff1576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600088888860405161103d9594939291906138a0565b60405180910390a3506109d360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961109981611daa565b6110a1611ea1565b6110a9611eff565b836000036110e3576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851661110a5760405163d92e233d60e01b815260040160405180910390fd5b6111148686612594565b61114a576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af11580156111b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d691906138e7565b61120c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121b6020890189613038565b6001600160a01b03160361123a5761123485848461218b565b50611248565b6112468786858561223e565b505b6112528686612594565b611288576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa1580156112e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130c9190613904565b9050801561131e5761131e8782612624565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161136593929190613886565b60405180910390a35061139760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6113ca81611daa565b610c8d61284a565b60006113dd81611daa565b6001600160a01b0382166114045760405163d92e233d60e01b815260040160405180910390fd5b60015461143b907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166120c7565b506114667f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83611db4565b50600154604080516001600160a01b03928316815291841660208301527f3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579910160405180910390a150600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961151381611daa565b61151b611ea1565b611523611eff565b8460000361155d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166115845760405163d92e233d60e01b815260040160405180910390fd5b6115986001600160a01b03881687876128c3565b6040517fc9028a360000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063c9028a36906115dd908590600401613979565b600060405180830381600087803b1580156115f757600080fd5b505af115801561160b573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e03587878787604051611658949392919061398c565b60405180910390a361139760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b600061169481611daa565b6001600160a01b0382166116bb5760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b0316156116fe576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117287f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611db4565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117af5750825b905060008267ffffffffffffffff1660011480156117cc5750303b155b9050811580156117da575080155b15611811576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118725784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061188f57506001600160a01b038716155b156118ad5760405163d92e233d60e01b815260040160405180910390fd5b6118b5612937565b6118bd61293f565b6118c5612937565b6118cd61294f565b6118d8600087611db4565b506119037f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611db4565b5061192e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a89611db4565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561198c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611db4565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611a215784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb611a5581611daa565b611a5d611ea1565b611a65611eff565b6001600160a01b038516611a8c5760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d8060008114611ad9576040519150601f19603f3d011682016040523d82523d6000602084013e611ade565b606091505b5050905080611b19576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc9028a360000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063c9028a3690611b5e908690600401613979565b600060405180830381600087803b158015611b7857600080fd5b505af1158015611b8c573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e03534888888604051611bda949392919061398c565b60405180910390a350611c0c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b611c1b611ea1565b611c23611eff565b84600003611c5d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611c845760405163d92e233d60e01b815260040160405180910390fd5b610400611c946060830183613671565b611c9f915084613826565b1115611cd7576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ce2338587611f80565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8787878787604051611d2d9594939291906138a0565b60405180910390a3611d5e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611da081611daa565b6109d383836120c7565b610c8d813361295f565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611e97576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611e4d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107b4565b60009150506107b4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611efd576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611f7a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611fc8576040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561202b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204f91906138e7565b612085576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610b3a906001600160a01b0384811691869116846129ec565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611e97576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107b4565b60606121978383612a25565b600080856001600160a01b03163486866040516121b59291906139c3565b60006040518083038185875af1925050503d80600081146121f2576040519150601f19603f3d011682016040523d82523d6000602084013e6121f7565b606091505b509150915081612233576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b6060836001600160a01b031663676cc054348786866040518563ffffffff1660e01b8152600401612271939291906139d3565b60006040518083038185885af115801561228f573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526122b891908101906139fe565b95945050505050565b6122c9612b25565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123ea57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123de7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611efd576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab81611daa565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612486575060408051601f3d908101601f1916820190925261248391810190613904565b60015b6124cc576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612528576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016124c3565b610b3a8383612b80565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611efd576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612600573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223791906138e7565b6003546001600160a01b0390811690831603612773576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156126a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ca91906138e7565b612700576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561275f57600080fd5b505af1158015611d5e573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156127d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fa91906138e7565b612830576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610cab906001600160a01b038481169116836128c3565b612852611ea1565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612333565b6040516001600160a01b03838116602483015260448201839052610b3a91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612bd6565b611efd612c52565b612947612c52565b611efd612cb9565b612957612c52565b611efd612cc1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610cab576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016124c3565b6040516001600160a01b0384811660248301528381166044830152606482018390526109d39186918216906323b872dd906084016128f0565b60048110610cab5781357f98933fac000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601612aaa576040517fed69977500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f36fd75ca000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610b3a576040517ff3459a9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611efd576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b8982612d12565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612bce57610b3a8282612dba565b610cab612e27565b6000612beb6001600160a01b03841683612e5f565b90508051600014158015612c10575080806020019051810190612c0e91906138e7565b155b15610b3a576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016124c3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611efd576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120a1612c52565b612cc9612c52565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612d61576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016124c3565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612dd79190613a6c565b600060405180830381855af49150503d8060008114612e12576040519150601f19603f3d011682016040523d82523d6000602084013e612e17565b606091505b50915091506122b8858383612e6d565b3415611efd576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061223783836000612ee2565b606082612e8257612e7d82612f98565b612237565b8151158015612e9957506001600160a01b0384163b155b15612edb576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016124c3565b5080612237565b606081471015612f20576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016124c3565b600080856001600160a01b03168486604051612f3c9190613a6c565b60006040518083038185875af1925050503d8060008114612f79576040519150601f19603f3d011682016040523d82523d6000602084013e612f7e565b606091505b5091509150612f8e868383612e6d565b9695505050505050565b805115612fa85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612fec57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461223757600080fd5b80356001600160a01b038116811461303357600080fd5b919050565b60006020828403121561304a57600080fd5b6122378261301c565b600060a0828403121561306557600080fd5b50919050565b6000806000806080858703121561308157600080fd5b61308a8561301c565b93506020850135925061309f6040860161301c565b9150606085013567ffffffffffffffff8111156130bb57600080fd5b6130c787828801613053565b91505092959194509250565b60008083601f8401126130e557600080fd5b50813567ffffffffffffffff8111156130fd57600080fd5b60208301915083602082850101111561311557600080fd5b9250929050565b6000806000806060858703121561313257600080fd5b61313b8561301c565b9350602085013567ffffffffffffffff81111561315757600080fd5b613163878288016130d3565b909450925050604085013567ffffffffffffffff8111156130bb57600080fd5b60006020828403121561319557600080fd5b5035919050565b600080604083850312156131af57600080fd5b823591506131bf6020840161301c565b90509250929050565b60006020828403121561306557600080fd5b600080600080606085870312156131f057600080fd5b6131fa86866131c8565b93506132086020860161301c565b9250604085013567ffffffffffffffff81111561322457600080fd5b613230878288016130d3565b95989497509550505050565b60005b8381101561325757818101518382015260200161323f565b50506000910152565b6000815180845261327881602086016020860161323c565b601f01601f19169290920160200192915050565b6020815260006122376020830184613260565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156132f7576132f761329f565b604052919050565b600067ffffffffffffffff8211156133195761331961329f565b50601f01601f191660200190565b6000806040838503121561333a57600080fd5b6133438361301c565b9150602083013567ffffffffffffffff81111561335f57600080fd5b8301601f8101851361337057600080fd5b803561338361337e826132ff565b6132ce565b81815286602083850101111561339857600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080604083850312156133cb57600080fd5b6133d48361301c565b9150602083013567ffffffffffffffff8111156133f057600080fd5b6133fc85828601613053565b9150509250929050565b60008060008060008060a0878903121561341f57600080fd5b61342988886131c8565b95506134376020880161301c565b94506134456040880161301c565b935060608701359250608087013567ffffffffffffffff81111561346857600080fd5b61347489828a016130d3565b979a9699509497509295939492505050565b60006080828403121561306557600080fd5b60008060008060008060a087890312156134b157600080fd5b6134ba8761301c565b95506134c86020880161301c565b945060408701359350606087013567ffffffffffffffff8111156134eb57600080fd5b6134f789828a016130d3565b909450925050608087013567ffffffffffffffff81111561351757600080fd5b61352389828a01613486565b9150509295509295509295565b60008060006060848603121561354557600080fd5b61354e8461301c565b925061355c6020850161301c565b915061356a6040850161301c565b90509250925092565b6000806000806060858703121561358957600080fd5b6135928561301c565b9350602085013567ffffffffffffffff8111156135ae57600080fd5b6135ba878288016130d3565b909450925050604085013567ffffffffffffffff8111156135da57600080fd5b6130c787828801613486565b60008060008060008060a087890312156135ff57600080fd5b6136088761301c565b95506020870135945061361d6040880161301c565b9350606087013567ffffffffffffffff81111561363957600080fd5b61364589828a016130d3565b909450925050608087013567ffffffffffffffff81111561366557600080fd5b61352389828a01613053565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136a657600080fd5b83018035915067ffffffffffffffff8211156136c157600080fd5b60200191503681900382131561311557600080fd5b8015158114610c8d57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261371957600080fd5b830160208101925035905067ffffffffffffffff81111561373957600080fd5b80360382131561311557600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b036137848261301c565b16825260006020820135613797816136d6565b151560208401526001600160a01b036137b26040840161301c565b1660408401526137c560608301836136e4565b60a060608601526137da60a086018284613748565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a0606082015260006122b860a0830184613773565b808201808211156107b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b604081526000613874604083018587613748565b8281036020840152612f8e8185613773565b8381526040602082015260006122b8604083018486613748565b8581526001600160a01b03851660208201526080604082015260006138c9608083018587613748565b82810360608401526138db8185613773565b98975050505050505050565b6000602082840312156138f957600080fd5b8151612237816136d6565b60006020828403121561391657600080fd5b5051919050565b6001600160a01b0361392e8261301c565b1682526001600160a01b036139456020830161301c565b16602083015260408181013590830152600061396460608301836136e4565b608060608601526122b8608086018284613748565b602081526000612237602083018461391d565b8481526060602082015260006139a6606083018587613748565b82810360408401526139b8818561391d565b979650505050505050565b8183823760009101908152919050565b6001600160a01b036139e48561301c565b1681526040602082015260006122b8604083018486613748565b600060208284031215613a1057600080fd5b815167ffffffffffffffff811115613a2757600080fd5b8201601f81018413613a3857600080fd5b8051613a4661337e826132ff565b818152856020838501011115613a5b57600080fd5b6122b882602083016020860161323c565b60008251613a7e81846020870161323c565b919091019291505056fea26469706673582212206318314aa1cc41b7cba921d67a047fb7f31d2f9bf04abea3d68242a66fc8760e64736f6c634300081a0033", } // GatewayEVMABI is the input ABI used to generate the binding from. @@ -794,46 +794,25 @@ func (_GatewayEVM *GatewayEVMTransactorSession) DepositAndCall0(receiver common. return _GatewayEVM.Contract.DepositAndCall0(&_GatewayEVM.TransactOpts, receiver, amount, asset, payload, revertOptions) } -// Execute is a paid mutator transaction binding the contract method 0x1cff79cd. -// -// Solidity: function execute(address destination, bytes data) payable returns(bytes) -func (_GatewayEVM *GatewayEVMTransactor) Execute(opts *bind.TransactOpts, destination common.Address, data []byte) (*types.Transaction, error) { - return _GatewayEVM.contract.Transact(opts, "execute", destination, data) -} - -// Execute is a paid mutator transaction binding the contract method 0x1cff79cd. -// -// Solidity: function execute(address destination, bytes data) payable returns(bytes) -func (_GatewayEVM *GatewayEVMSession) Execute(destination common.Address, data []byte) (*types.Transaction, error) { - return _GatewayEVM.Contract.Execute(&_GatewayEVM.TransactOpts, destination, data) -} - -// Execute is a paid mutator transaction binding the contract method 0x1cff79cd. -// -// Solidity: function execute(address destination, bytes data) payable returns(bytes) -func (_GatewayEVM *GatewayEVMTransactorSession) Execute(destination common.Address, data []byte) (*types.Transaction, error) { - return _GatewayEVM.Contract.Execute(&_GatewayEVM.TransactOpts, destination, data) -} - -// Execute0 is a paid mutator transaction binding the contract method 0x38e22527. +// Execute is a paid mutator transaction binding the contract method 0x38e22527. // // Solidity: function execute((address) messageContext, address destination, bytes data) payable returns(bytes) -func (_GatewayEVM *GatewayEVMTransactor) Execute0(opts *bind.TransactOpts, messageContext MessageContext, destination common.Address, data []byte) (*types.Transaction, error) { - return _GatewayEVM.contract.Transact(opts, "execute0", messageContext, destination, data) +func (_GatewayEVM *GatewayEVMTransactor) Execute(opts *bind.TransactOpts, messageContext MessageContext, destination common.Address, data []byte) (*types.Transaction, error) { + return _GatewayEVM.contract.Transact(opts, "execute", messageContext, destination, data) } -// Execute0 is a paid mutator transaction binding the contract method 0x38e22527. +// Execute is a paid mutator transaction binding the contract method 0x38e22527. // // Solidity: function execute((address) messageContext, address destination, bytes data) payable returns(bytes) -func (_GatewayEVM *GatewayEVMSession) Execute0(messageContext MessageContext, destination common.Address, data []byte) (*types.Transaction, error) { - return _GatewayEVM.Contract.Execute0(&_GatewayEVM.TransactOpts, messageContext, destination, data) +func (_GatewayEVM *GatewayEVMSession) Execute(messageContext MessageContext, destination common.Address, data []byte) (*types.Transaction, error) { + return _GatewayEVM.Contract.Execute(&_GatewayEVM.TransactOpts, messageContext, destination, data) } -// Execute0 is a paid mutator transaction binding the contract method 0x38e22527. +// Execute is a paid mutator transaction binding the contract method 0x38e22527. // // Solidity: function execute((address) messageContext, address destination, bytes data) payable returns(bytes) -func (_GatewayEVM *GatewayEVMTransactorSession) Execute0(messageContext MessageContext, destination common.Address, data []byte) (*types.Transaction, error) { - return _GatewayEVM.Contract.Execute0(&_GatewayEVM.TransactOpts, messageContext, destination, data) +func (_GatewayEVM *GatewayEVMTransactorSession) Execute(messageContext MessageContext, destination common.Address, data []byte) (*types.Transaction, error) { + return _GatewayEVM.Contract.Execute(&_GatewayEVM.TransactOpts, messageContext, destination, data) } // ExecuteRevert is a paid mutator transaction binding the contract method 0xcb7ba8e5. @@ -857,25 +836,25 @@ func (_GatewayEVM *GatewayEVMTransactorSession) ExecuteRevert(destination common return _GatewayEVM.Contract.ExecuteRevert(&_GatewayEVM.TransactOpts, destination, data, revertContext) } -// ExecuteWithERC20 is a paid mutator transaction binding the contract method 0x5131ab59. +// ExecuteWithERC20 is a paid mutator transaction binding the contract method 0x7bbe9afa. // -// Solidity: function executeWithERC20(address token, address to, uint256 amount, bytes data) returns() -func (_GatewayEVM *GatewayEVMTransactor) ExecuteWithERC20(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _GatewayEVM.contract.Transact(opts, "executeWithERC20", token, to, amount, data) +// Solidity: function executeWithERC20((address) messageContext, address token, address to, uint256 amount, bytes data) returns() +func (_GatewayEVM *GatewayEVMTransactor) ExecuteWithERC20(opts *bind.TransactOpts, messageContext MessageContext, token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _GatewayEVM.contract.Transact(opts, "executeWithERC20", messageContext, token, to, amount, data) } -// ExecuteWithERC20 is a paid mutator transaction binding the contract method 0x5131ab59. +// ExecuteWithERC20 is a paid mutator transaction binding the contract method 0x7bbe9afa. // -// Solidity: function executeWithERC20(address token, address to, uint256 amount, bytes data) returns() -func (_GatewayEVM *GatewayEVMSession) ExecuteWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _GatewayEVM.Contract.ExecuteWithERC20(&_GatewayEVM.TransactOpts, token, to, amount, data) +// Solidity: function executeWithERC20((address) messageContext, address token, address to, uint256 amount, bytes data) returns() +func (_GatewayEVM *GatewayEVMSession) ExecuteWithERC20(messageContext MessageContext, token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _GatewayEVM.Contract.ExecuteWithERC20(&_GatewayEVM.TransactOpts, messageContext, token, to, amount, data) } -// ExecuteWithERC20 is a paid mutator transaction binding the contract method 0x5131ab59. +// ExecuteWithERC20 is a paid mutator transaction binding the contract method 0x7bbe9afa. // -// Solidity: function executeWithERC20(address token, address to, uint256 amount, bytes data) returns() -func (_GatewayEVM *GatewayEVMTransactorSession) ExecuteWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _GatewayEVM.Contract.ExecuteWithERC20(&_GatewayEVM.TransactOpts, token, to, amount, data) +// Solidity: function executeWithERC20((address) messageContext, address token, address to, uint256 amount, bytes data) returns() +func (_GatewayEVM *GatewayEVMTransactorSession) ExecuteWithERC20(messageContext MessageContext, token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _GatewayEVM.Contract.ExecuteWithERC20(&_GatewayEVM.TransactOpts, messageContext, token, to, amount, data) } // GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. diff --git a/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go b/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go index 6da06a0f..dca2d246 100644 --- a/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go +++ b/v2/pkg/gatewayevm.t.sol/gatewayevminboundtest.go @@ -66,8 +66,8 @@ type StdInvariantFuzzSelector struct { // GatewayEVMInboundTestMetaData contains all meta data concerning the GatewayEVMInboundTest contract. var GatewayEVMInboundTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallWithPayloadFailsIfDestinationIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallWithPayloadFailsIfPayloadSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyFailsIfPayloadSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayloadFailsIfPayloadSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayloadFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTssWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTssWithPayloadFailsIfPayloadSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZetaToConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfPayloadSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedOnCall\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZETANotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055620f4240602c55348015603357600080fd5b5061bf49806100436000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c8063916a17c611610145578063ba414fa6116100bd578063e20c9f711161008c578063e85c5a0711610071578063e85c5a07146103a2578063f96c02df146103aa578063fa7626d4146103b257600080fd5b8063e20c9f7114610392578063e306a9781461039a57600080fd5b8063ba414fa614610362578063bb93f11e1461037a578063c13d738f14610382578063d896e2611461038a57600080fd5b8063aa030c1c11610114578063b1409f71116100f9578063b1409f711461034a578063b284906314610352578063b5508aa91461035a57600080fd5b8063aa030c1c1461033a578063b0464fdc1461034257600080fd5b8063916a17c61461030d57806395cd0445146103225780639fd1e5971461032a578063a48abc2a1461033257600080fd5b80633e5e3c23116101d857806351da903d116101a757806366d9a9a01161018c57806366d9a9a0146102db5780637478fda0146102f057806385226c81146102f857600080fd5b806351da903d146102cb5780636459542a146102d357600080fd5b80633e5e3c23146102ab5780633f7286f4146102b3578063466f332e146102bb5780634ce25c0a146102c357600080fd5b80631806a9a5116102145780631806a9a5146102685780631ed7831c146102705780632ade38801461028e57806330f7c04f146102a357600080fd5b806305a898e21461024657806306978ca3146102505780630724d8e3146102585780630a9254e414610260575b600080fd5b61024e6103bf565b005b61024e610576565b61024e61068e565b61024e610842565b61024e61138b565b610278611488565b6040516102859190618649565b60405180910390f35b6102966114ea565b60405161028591906186e5565b61024e61162c565b610278611a9f565b610278611aff565b61024e611b5f565b61024e611e51565b61024e6120ed565b61024e61224e565b6102e3612647565b604051610285919061884b565b61024e6127c9565b6103006128cc565b60405161028591906188e9565b61031561299c565b6040516102859190618960565b61024e612a97565b61024e612ded565b61024e61300f565b61024e613203565b6103156133c0565b61024e6134bb565b61024e61376d565b61030061397b565b61036a613a4b565b6040519015158152602001610285565b61024e613b1f565b61024e613c16565b61024e613d0d565b610278613e88565b61024e613ee8565b61024e6140ce565b61024e61434f565b601f5461036a9060ff1681565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3906104b7906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b1580156104d157600080fd5b505af11580156104e5573d6000803e3d6000fd5b50506020546023546040517fd09e3b780000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063d09e3b7893506105409260009288929116908790602890600401618b33565b600060405180830381600087803b15801561055a57600080fd5b505af115801561056e573d6000803e3d6000fd5b505050505050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e73756666696369656e74455448416d6f756e7400000000000000000000006044820152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561060c57600080fd5b505af1158015610620573d6000803e3d6000fd5b50506020546026546040517f726ac97c0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063726ac97c93508592610675921690602890600401618b88565b6000604051808303818588803b15801561055a57600080fd5b6027546020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039182166084820152620186a092919091163190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561072a57600080fd5b505af115801561073e573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c9061078d908690600090602890618baa565b60405180910390a36020546026546040517f726ac97c0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263726ac97c9286926107e89290911690602890600401618b88565b6000604051808303818588803b15801561080157600080fd5b505af1158015610815573d6000803e3d6000fd5b50506027546001600160a01b031631925061083d915061083790508484618c0f565b82614465565b505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805490911661567817905560405161089490618576565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610919573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602754604051911690819061096290618583565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610995573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260275460255492519086169481019490945260448401929092529092166064820152610a8791906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526144e4565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681178255604080518082018252601081527f4552433230437573746f64792e736f6c000000000000000000000000000000009381019390935260275460255491516024810193909352841660448301529092166064830152610b5791608401610a2a565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602180549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055604080518082018252601a81527f5a657461436f6e6e6563746f724e6f6e4e61746976652e736f6c00000000000060208083019190915254602480546027546025549551938716928401929092528516604483015284166064820152919092166084820152610c90919060a40160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff8c8765e000000000000000000000000000000000000000000000000000000001790526144e4565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602280549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091161790556027546040517fca669fa700000000000000000000000000000000000000000000000000000000815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610d6857600080fd5b505af1158015610d7c573d6000803e3d6000fd5b5050602480546027546022546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b158015610def57600080fd5b505af1158015610e03573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610e8757600080fd5b505af1158015610e9b573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610f1157600080fd5b505af1158015610f25573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610f8b57600080fd5b505af1158015610f9f573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561100557600080fd5b505af1158015611019573d6000803e3d6000fd5b50506021546023546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401600060405180830381600087803b15801561107f57600080fd5b505af1158015611093573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110f557600080fd5b505af1158015611109573d6000803e3d6000fd5b5050602354602554602c546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152911692506340c10f199150604401600060405180830381600087803b15801561117a57600080fd5b505af115801561118e573d6000803e3d6000fd5b50506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561120457600080fd5b505af1158015611218573d6000803e3d6000fd5b5050602254602554602c546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152600060448201529116925063106e62909150606401600060405180830381600087803b15801561129057600080fd5b505af11580156112a4573d6000803e3d6000fd5b50506040805160a08101825261032180825260016020808401918252838501928352845190810190945260008085526060840185905260808401528251602880549251151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009093166001600160a01b0392831617929092178255915160298054919093167fffffffffffffffffffffffff000000000000000000000000000000000000000091909116179091559093509150602a9061137b9082618c98565b5060808201518160030155905050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561142157600080fd5b505af1158015611435573d6000803e3d6000fd5b50506020546040517f726ac97c0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063726ac97c9150839061067590600090602890600401618b88565b606060168054806020026020016040519081016040528092919081815260200182805480156114e057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114c2575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561162357600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561160c57838290600052602060002001805461157f906189f7565b80601f01602080910402602001604051908101604052809291908181526020018280546115ab906189f7565b80156115f85780601f106115cd576101008083540402835291602001916115f8565b820191906000526020600020905b8154815290600101906020018083116115db57829003601f168201915b505050505081526020019060010190611560565b50505050815250508152602001906001019061150e565b50505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190618d57565b90506116c9600082614465565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101879052929350169063095ea7b3906044016020604051808303816000875af11580156117ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d09190618d70565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561185f57600080fd5b505af1158015611873573d6000803e3d6000fd5b50506026546025546023546040516001600160a01b03938416955091831693507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c926118c9928992909116908790602890618d92565b60405180910390a36020546026546023546040517fd09e3b780000000000000000000000000000000000000000000000000000000081526001600160a01b039384169363d09e3b789361192d93908216928992909116908790602890600401618b33565b600060405180830381600087803b15801561194757600080fd5b505af115801561195b573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb9190618d57565b90506119f78482614465565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611a61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a859190618d57565b9050611a9885602c546108379190618dcc565b5050505050565b606060188054806020026020016040519081016040528092919081815260200182805480156114e0576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116114c2575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156114e0576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116114c2575050505050905090565b60208054604080517fa2ba19340000000000000000000000000000000000000000000000000000000081529051620186a0936000936002936001600160a01b039091169263a2ba1934926004808401939192918290030181865afa158015611bcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bef9190618d57565b611bf99190618ddf565b67ffffffffffffffff811115611c1157611c11618c22565b6040519080825280601f01601f191660200182016040528015611c3b576020820181803683370190505b5060208054604080517fa2ba193400000000000000000000000000000000000000000000000000000000815290519394506002936001600160a01b039092169263a2ba1934926004808401938290030181865afa158015611ca0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc49190618d57565b611cce9190618ddf565b611cd9906001618c0f565b67ffffffffffffffff811115611cf157611cf1618c22565b6040519080825280601f01601f191660200182016040528015611d1b576020820181803683370190505b50602a90611d299082618c98565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f386691aa000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024015b600060405180830381600087803b158015611db057600080fd5b505af1158015611dc4573d6000803e3d6000fd5b50506020546026546040517f744b9b8b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063744b9b8b93508692611e1b9216908690602890600401618e1a565b6000604051808303818588803b158015611e3457600080fd5b505af1158015611e48573d6000803e3d6000fd5b50505050505050565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a06024820181905292919091169063095ea7b3906044016020604051808303816000875af1158015611ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eea9190618d70565b5060208054604080517fa2ba193400000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169263a2ba1934926004808401938290030181865afa158015611f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6d9190618d57565b611f78906001618c0f565b67ffffffffffffffff811115611f9057611f90618c22565b6040519080825280601f01601f191660200182016040528015611fba576020820181803683370190505b50602a90611fc89082618c98565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f386691aa000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024015b600060405180830381600087803b15801561204f57600080fd5b505af1158015612063573d6000803e3d6000fd5b50506020546026546023546040517f102614b00000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063102614b094506120bf939283169287921690602890600401618e4e565b600060405180830381600087803b1580156120d957600080fd5b505af1158015611a98573d6000803e3d6000fd5b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156121e757600080fd5b505af11580156121fb573d6000803e3d6000fd5b50506020546040517f1becceb40000000000000000000000000000000000000000000000000000000081526001600160a01b039091169250631becceb491506120bf906000908590602890600401618e1a565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa1580156122ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122de9190618d57565b90506122eb600082614465565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af1158015612359573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237d9190618d70565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561240c57600080fd5b505af1158015612420573d6000803e3d6000fd5b50506026546025546023546040516001600160a01b03938416955091831693507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c9261247492889290911690602890618baa565b60405180910390a36020546026546023546040517f102614b00000000000000000000000000000000000000000000000000000000081526001600160a01b039384169363102614b0936124d69390821692889290911690602890600401618e4e565b600060405180830381600087803b1580156124f057600080fd5b505af1158015612504573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612570573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125949190618d57565b90506125a08382614465565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561260a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262e9190618d57565b905061264184602c546108379190618dcc565b50505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611623578382906000526020600020906002020160405180604001604052908160008201805461269e906189f7565b80601f01602080910402602001604051908101604052809291908181526020018280546126ca906189f7565b80156127175780601f106126ec57610100808354040283529160200191612717565b820191906000526020600020905b8154815290600101906020018083116126fa57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156127b157602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161275e5790505b5050505050815250508152602001906001019061266b565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561285f57600080fd5b505af1158015612873573d6000803e3d6000fd5b50506020546023546040517f102614b00000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063102614b093506120bf926000928792911690602890600401618e4e565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561162357838290600052602060002001805461290f906189f7565b80601f016020809104026020016040519081016040528092919081815260200182805461293b906189f7565b80156129885780601f1061295d57610100808354040283529160200191612988565b820191906000526020600020905b81548152906001019060200180831161296b57829003601f168201915b5050505050815260200190600101906128f0565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156116235760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612a7f57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612a2c5790505b505050505081525050815260200190600101906129c0565b60208054604080517fa2ba19340000000000000000000000000000000000000000000000000000000081529051620186a0936000936002936001600160a01b039091169263a2ba1934926004808401939192918290030181865afa158015612b03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b279190618d57565b612b319190618ddf565b67ffffffffffffffff811115612b4957612b49618c22565b6040519080825280601f01601f191660200182016040528015612b73576020820181803683370190505b5060208054604080517fa2ba193400000000000000000000000000000000000000000000000000000000815290519394506002936001600160a01b039092169263a2ba1934926004808401938290030181865afa158015612bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfc9190618d57565b612c069190618ddf565b612c11906001618c0f565b67ffffffffffffffff811115612c2957612c29618c22565b6040519080825280601f01601f191660200182016040528015612c53576020820181803683370190505b50602a90612c619082618c98565b506023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af1158015612cd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf49190618d70565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f386691aa000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024015b600060405180830381600087803b158015612d7b57600080fd5b505af1158015612d8f573d6000803e3d6000fd5b50506020546026546023546040517fd09e3b780000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063d09e3b7894506105409392831692889216908790602890600401618b33565b6027546026546040516001600160a01b039182166024820152620186a09291909116319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612efe57600080fd5b505af1158015612f12573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c90612f639087906000908790602890618d92565b60405180910390a36020546026546040517f744b9b8b0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263744b9b8b928792612fc092909116908690602890600401618e1a565b6000604051808303818588803b158015612fd957600080fd5b505af1158015612fed573d6000803e3d6000fd5b50506027546001600160a01b0316319250612641915061083790508585618c0f565b60208054604080517fa2ba193400000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169263a2ba1934926004808401938290030181865afa15801561306d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130919190618d57565b61309c906001618c0f565b67ffffffffffffffff8111156130b4576130b4618c22565b6040519080825280601f01601f1916602001820160405280156130de576020820181803683370190505b50602a906130ec9082618c98565b506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5061796c6f616453697a654578636565646564000000000000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561318057600080fd5b505af1158015613194573d6000803e3d6000fd5b50506020546026546040517f726ac97c0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063726ac97c93506001926131ea921690602890600401618b88565b6000604051808303818588803b1580156120d957600080fd5b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561330657600080fd5b505af115801561331a573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97490613366908590602890618e85565b60405180910390a36020546026546040517f1becceb40000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692631becceb4926120bf929116908590602890600401618e1a565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156116235760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156134a357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116134505790505b505050505081525050815260200190600101906133e4565b60208054604080517fa2ba193400000000000000000000000000000000000000000000000000000000815290516000936002936001600160a01b03169263a2ba193492600480830193928290030181865afa15801561351e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135429190618d57565b61354c9190618ddf565b67ffffffffffffffff81111561356457613564618c22565b6040519080825280601f01601f19166020018201604052801561358e576020820181803683370190505b5060208054604080517fa2ba193400000000000000000000000000000000000000000000000000000000815290519394506002936001600160a01b039092169263a2ba1934926004808401938290030181865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136179190618d57565b6136219190618ddf565b61362c906001618c0f565b67ffffffffffffffff81111561364457613644618c22565b6040519080825280601f01601f19166020018201604052801561366e576020820181803683370190505b50602a9061367c9082618c98565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f386691aa000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561370257600080fd5b505af1158015613716573d6000803e3d6000fd5b50506020546026546040517f1becceb40000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631becceb493506120bf92909116908590602890600401618e1a565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a06024820181905292919091169063095ea7b3906044016020604051808303816000875af11580156137e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138069190618d70565b506025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561387957600080fd5b505af115801561388d573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b1580156138f357600080fd5b505af1158015613907573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fac2175f1000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401612035565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156116235783829060005260206000200180546139be906189f7565b80601f01602080910402602001604051908101604052809291908181526020018280546139ea906189f7565b8015613a375780601f10613a0c57610100808354040283529160200191613a37565b820191906000526020600020905b815481529060010190602001808311613a1a57829003601f168201915b50505050508152602001906001019061399f565b60085460009060ff1615613a63575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b189190618d57565b1415905090565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390612d619060040160208082526017908201527f496e73756666696369656e744552433230416d6f756e74000000000000000000604082015260600190565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390611d969060040160208082526015908201527f496e73756666696369656e74455448416d6f756e740000000000000000000000604082015260600190565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390613e05906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b158015613e1f57600080fd5b505af1158015613e33573d6000803e3d6000fd5b50506020546040517f744b9b8b0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063744b9b8b91508490611e1b906000908690602890600401618e1a565b606060158054806020026020016040519081016040528092919081815260200182805480156114e0576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116114c2575050505050905090565b602480546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a093810184905291169063095ea7b3906044016020604051808303816000875af1158015613f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f7e9190618d70565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fe4dd681d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561400457600080fd5b505af1158015614018573d6000803e3d6000fd5b50506026546025546024546040516001600160a01b03938416955091831693507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c9261406c92879290911690602890618baa565b60405180910390a36020546026546024546040517f102614b00000000000000000000000000000000000000000000000000000000081526001600160a01b039384169363102614b0936120bf9390821692879290911690602890600401618e4e565b6026546040516001600160a01b039091166024820152620186a09060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052929350169063095ea7b3906044016020604051808303816000875af11580156141b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141da9190618d70565b506025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561424d57600080fd5b505af1158015614261573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b1580156142c757600080fd5b505af11580156142db573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fac2175f1000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401612d61565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260006024820181905292919091169063095ea7b3906044016020604051808303816000875af11580156143c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143e69190618d70565b506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e73756666696369656e744552433230416d6f756e740000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401612035565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156144d057600080fd5b505afa15801561056e573d6000803e3d6000fd5b60006144ee618590565b6144f9848483614503565b9150505b92915050565b600080614510858461457e565b90506145736040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161455e929190618eaa565b6040516020818303038152906040528561458a565b9150505b9392505050565b600061457783836145b8565b60c081015151600090156145ae576145a784848460c001516145d3565b9050614577565b6145a78484614779565b60006145c48383614864565b6145778383602001518461458a565b6000806145de614874565b905060006145ec8683614947565b905060006146038260600151836020015185614ded565b9050600061461383838989614fff565b9050600061462082615e7c565b602081015181519192509060030b156146935789826040015160405160200161464a929190618ecc565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261468a91600401618f4d565b60405180910390fd5b60006146d66040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161604b565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614729908490600401618f4d565b602060405180830381865afa158015614746573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061476a9190618f60565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906147ce908790600401618f4d565b600060405180830381865afa1580156147eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526148139190810190619042565b90506000614841828560405160200161482d929190619077565b60405160208183030381529060405261624b565b90506001600160a01b0381166144f957848460405160200161464a9291906190a6565b6148708282600061625e565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906148fb908490600401619151565b600060405180830381865afa158015614918573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149409190810190619198565b9250505090565b6149796040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506149c46040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6149cd85616361565b602082015260006149dd86616746565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614a1f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614a479190810190619198565b86838560200151604051602001614a6194939291906191e1565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190614ab9908590600401618f4d565b600060405180830381865afa158015614ad6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614afe9190810190619198565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690614b469084906004016192e5565b602060405180830381865afa158015614b63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b879190618d70565b614b9c578160405160200161464a9190619337565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614be19084906004016193c9565b600060405180830381865afa158015614bfe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614c269190810190619198565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614c6d90849060040161941b565b602060405180830381865afa158015614c8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cae9190618d70565b15614d43576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614cf890849060040161941b565b600060405180830381865afa158015614d15573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614d3d9190810190619198565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001614d68919061946d565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614d949291906194d9565b600060405180830381865afa158015614db1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614dd99190810190619198565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081614e095790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614e6957614e696194fe565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110614ebd57614ebd6194fe565b602002602001018190525084604051602001614ed9919061952d565b60405160208183030381529060405281600281518110614efb57614efb6194fe565b602002602001018190525082604051602001614f179190619599565b60405160208183030381529060405281600381518110614f3957614f396194fe565b60200260200101819052506000614f4f82615e7c565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614fe090604080518082018252600080825260209182015281518083019092528451825280850190820152906169c9565b614ff5578560405160200161464a91906195da565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d901561504f565b511590565b6151c35782602001511561510b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161468a565b8260c00151156151c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161468a565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816151dc57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806152379061966b565b935060ff168151811061524c5761524c6194fe565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161529d919061968a565b6040516020818303038152906040528282806152b89061966b565b935060ff16815181106152cd576152cd6194fe565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061531a9061966b565b935060ff168151811061532f5761532f6194fe565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061537c9061966b565b935060ff1681518110615391576153916194fe565b602002602001018190525087602001518282806153ad9061966b565b935060ff16815181106153c2576153c26194fe565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061540f9061966b565b935060ff1681518110615424576154246194fe565b60209081029190910101528751828261543c8161966b565b935060ff1681518110615451576154516194fe565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061549e9061966b565b935060ff16815181106154b3576154b36194fe565b60200260200101819052506154c746616a2a565b82826154d28161966b565b935060ff16815181106154e7576154e76194fe565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806155349061966b565b935060ff1681518110615549576155496194fe565b6020026020010181905250868282806155619061966b565b935060ff1681518110615576576155766194fe565b602090810291909101015285511561569d5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826155c78161966b565b935060ff16815181106155dc576155dc6194fe565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061562c908990600401618f4d565b600060405180830381865afa158015615649573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156719190810190619198565b828261567c8161966b565b935060ff1681518110615691576156916194fe565b60200260200101819052505b84602001511561576d5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826156e68161966b565b935060ff16815181106156fb576156fb6194fe565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806157489061966b565b935060ff168151811061575d5761575d6194fe565b6020026020010181905250615934565b6157a561504a8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6158385760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826157e88161966b565b935060ff16815181106157fd576157fd6194fe565b60200260200101819052508460a0015160405160200161581d919061952d565b6040516020818303038152906040528282806157489061966b565b8460c0015115801561587b57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261587990511590565b155b156159345760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826158bf8161966b565b935060ff16815181106158d4576158d46194fe565b60200260200101819052506158e888616aca565b6040516020016158f8919061952d565b6040516020818303038152906040528282806159139061966b565b935060ff1681518110615928576159286194fe565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261596890511590565b6159fd5760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826159ab8161966b565b935060ff16815181106159c0576159c06194fe565b602002602001018190525084604001518282806159dc9061966b565b935060ff16815181106159f1576159f16194fe565b60200260200101819052505b606085015115615b1e5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282615a468161966b565b935060ff1681518110615a5b57615a5b6194fe565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015615aca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615af29190810190619198565b8282615afd8161966b565b935060ff1681518110615b1257615b126194fe565b60200260200101819052505b60e08501515115615bc55760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282615b688161966b565b935060ff1681518110615b7d57615b7d6194fe565b6020026020010181905250615b998560e0015160000151616a2a565b8282615ba48161966b565b935060ff1681518110615bb957615bb96194fe565b60200260200101819052505b60e08501516020015115615c6f5760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282615c128161966b565b935060ff1681518110615c2757615c276194fe565b6020026020010181905250615c438560e0015160200151616a2a565b8282615c4e8161966b565b935060ff1681518110615c6357615c636194fe565b60200260200101819052505b60e08501516040015115615d195760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282615cbc8161966b565b935060ff1681518110615cd157615cd16194fe565b6020026020010181905250615ced8560e0015160400151616a2a565b8282615cf88161966b565b935060ff1681518110615d0d57615d0d6194fe565b60200260200101819052505b60e08501516060015115615dc35760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615d668161966b565b935060ff1681518110615d7b57615d7b6194fe565b6020026020010181905250615d978560e0015160600151616a2a565b8282615da28161966b565b935060ff1681518110615db757615db76194fe565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615de157615de1618c22565b604051908082528060200260200182016040528015615e1457816020015b6060815260200190600190039081615dff5790505b50905060005b8260ff168160ff161015615e6d57838160ff1681518110615e3d57615e3d6194fe565b6020026020010151828260ff1681518110615e5a57615e5a6194fe565b6020908102919091010152600101615e1a565b5093505050505b949350505050565b615ea36040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91615f29918691016196f5565b600060405180830381865afa158015615f46573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615f6e9190810190619198565b90506000615f7c86836175b9565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401615fac91906188e9565b6000604051808303816000875af1158015615fcb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615ff3919081019061973c565b805190915060030b1580159061600c5750602081015151155b801561601b5750604081015151155b15614ff55781600081518110616033576160336194fe565b602002602001015160405160200161464a91906197f2565b606060006160808560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506160b79082905b9061770e565b156162145760006161348261612e846161286160fa8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617735565b90617797565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061619890829061770e565b1561620257604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ff905b829061781c565b90505b61620b81617842565b92505050614577565b821561622d57848460405160200161464a9291906199de565b5050604080516020810190915260008152614577565b509392505050565b6000808251602084016000f09392505050565b8160a001511561626d57505050565b600061627a8484846178ab565b9050600061628782615e7c565b602081015181519192509060030b1580156163235750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616323906040805180820182526000808252602091820152815180830190925284518252808501908201526160b1565b1561633057505050505050565b6040820151511561635057816040015160405160200161464a9190619a85565b8060405160200161464a9190619ae3565b606060006163968360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506163fb905b82906169c9565b1561646a57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261457790616465908390617e46565b617842565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164cc905b8290617ed0565b60010361659957604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616532906161f8565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261457790616465905b839061781c565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165f8906163f4565b1561672f57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616660908390617f6a565b9050600081600183516166739190618dcc565b81518110616683576166836194fe565b602002602001015190506167266164656166f96040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617e46565b95945050505050565b8260405160200161464a9190619b4e565b50919050565b6060600061677b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506167dd906163f4565b156167eb5761457781617842565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261684a906164c5565b6001036168b457604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526145779061646590616592565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616913906163f4565b1561672f57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061697b908390617f6a565b90506001815111156169b75780600282516169969190618dcc565b815181106169a6576169a66194fe565b602002602001015192505050919050565b508260405160200161464a9190619b4e565b8051825160009111156169de575060006144fd565b815183516020850151600092916169f491618c0f565b6169fe9190618dcc565b905082602001518103616a155760019150506144fd565b82516020840151819020912014905092915050565b60606000616a378361800f565b600101905060008167ffffffffffffffff811115616a5757616a57618c22565b6040519080825280601f01601f191660200182016040528015616a81576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084616a8b57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616b56905b82906180f1565b15616b9657505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616bf590616b4f565b15616c3557505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c9490616b4f565b15616cd457505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d3390616b4f565b80616d985750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d9890616b4f565b15616dd857505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e3790616b4f565b80616e9c5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e9c90616b4f565b15616edc57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f3b90616b4f565b80616fa05750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616fa090616b4f565b15616fe057505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261703f90616b4f565b806170a45750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170a490616b4f565b156170e457505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261714390616b4f565b1561718357505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171e290616b4f565b1561722257505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261728190616b4f565b156172c157505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261732090616b4f565b1561736057505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526173bf90616b4f565b156173ff57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261745e90616b4f565b806174c35750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174c390616b4f565b1561750357505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261756290616b4f565b156175a257505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161464a9290602001619c2c565b60608060005b845181101561764457818582815181106175db576175db6194fe565b60200260200101516040516020016175f4929190619077565b6040516020818303038152906040529150600185516176139190618dcc565b811461763c578160405160200161762a9190619d95565b60405160208183030381529060405291505b6001016175bf565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161765d5790505090508381600081518110617688576176886194fe565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106176dc576176dc6194fe565b602002602001018190525081816002815181106176fb576176fb6194fe565b6020908102919091010152949350505050565b602080830151835183519284015160009361772c9291849190618105565b14159392505050565b604080518082019091526000808252602082015260006177678460000151856020015185600001518660200151618216565b90508360200151816177799190618dcc565b84518590617788908390618dcc565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156177bc5750816144fd565b60208083015190840151600191146177e35750815160208481015190840151829020919020145b8015617814578251845185906177fa908390618dcc565b9052508251602085018051617810908390618c0f565b9052505b509192915050565b604080518082019091526000808252602082015261783b838383618336565b5092915050565b60606000826000015167ffffffffffffffff81111561786357617863618c22565b6040519080825280601f01601f19166020018201604052801561788d576020820181803683370190505b509050600060208201905061783b81856020015186600001516183e1565b606060006178b7614874565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816178d457905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061792f9061966b565b935060ff1681518110617944576179446194fe565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016179959190619dd6565b6040516020818303038152906040528282806179b09061966b565b935060ff16815181106179c5576179c56194fe565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280617a129061966b565b935060ff1681518110617a2757617a276194fe565b602002602001018190525082604051602001617a439190619599565b604051602081830303815290604052828280617a5e9061966b565b935060ff1681518110617a7357617a736194fe565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280617ac09061966b565b935060ff1681518110617ad557617ad56194fe565b6020026020010181905250617aea878461845b565b8282617af58161966b565b935060ff1681518110617b0a57617b0a6194fe565b602090810291909101015285515115617bb65760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282617b5c8161966b565b935060ff1681518110617b7157617b716194fe565b6020026020010181905250617b8a86600001518461845b565b8282617b958161966b565b935060ff1681518110617baa57617baa6194fe565b60200260200101819052505b856080015115617c245760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282617bff8161966b565b935060ff1681518110617c1457617c146194fe565b6020026020010181905250617c8a565b8415617c8a5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282617c698161966b565b935060ff1681518110617c7e57617c7e6194fe565b60200260200101819052505b60408601515115617d265760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282617cd48161966b565b935060ff1681518110617ce957617ce96194fe565b60200260200101819052508560400151828280617d059061966b565b935060ff1681518110617d1a57617d1a6194fe565b60200260200101819052505b856060015115617d905760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617d6f8161966b565b935060ff1681518110617d8457617d846194fe565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617dae57617dae618c22565b604051908082528060200260200182016040528015617de157816020015b6060815260200190600190039081617dcc5790505b50905060005b8260ff168160ff161015617e3a57838160ff1681518110617e0a57617e0a6194fe565b6020026020010151828260ff1681518110617e2757617e276194fe565b6020908102919091010152600101617de7565b50979650505050505050565b6040805180820190915260008082526020820152815183511015617e6b5750816144fd565b81518351602085015160009291617e8191618c0f565b617e8b9190618dcc565b60208401519091506001908214617eac575082516020840151819020908220145b8015617ec757835185518690617ec3908390618dcc565b9052505b50929392505050565b6000808260000151617ef48560000151866020015186600001518760200151618216565b617efe9190618c0f565b90505b83516020850151617f129190618c0f565b811161783b5781617f2281619e1b565b9250508260000151617f59856020015183617f3d9190618dcc565b8651617f499190618dcc565b8386600001518760200151618216565b617f639190618c0f565b9050617f01565b60606000617f788484617ed0565b617f83906001618c0f565b67ffffffffffffffff811115617f9b57617f9b618c22565b604051908082528060200260200182016040528015617fce57816020015b6060815260200190600190039081617fb95790505b50905060005b815181101561624357617fea616465868661781c565b828281518110617ffc57617ffc6194fe565b6020908102919091010152600101617fd4565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310618058577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618084576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106180a257662386f26fc10000830492506010015b6305f5e10083106180ba576305f5e100830492506008015b61271083106180ce57612710830492506004015b606483106180e0576064830492506002015b600a83106144fd5760010192915050565b60006180fd838361849b565b159392505050565b60008085841161820c57602084116181b8576000841561815057600161812c866020618dcc565b618137906008619e35565b618142906002619f33565b61814c9190618dcc565b1990505b835181168561815f8989618c0f565b6181699190618dcc565b805190935082165b8181146181a35787841161818b5787945050505050615e74565b8361819581619f3f565b945050828451169050618171565b6181ad8785618c0f565b945050505050615e74565b8383206181c58588618dcc565b6181cf9087618c0f565b91505b85821061820a578482208082036181f7576181ed8684618c0f565b9350505050615e74565b618202600184618dcc565b9250506181d2565b505b5092949350505050565b6000838186851161832157602085116182d0576000851561826257600161823e876020618dcc565b618249906008619e35565b618254906002619f33565b61825e9190618dcc565b1990505b845181166000876182738b8b618c0f565b61827d9190618dcc565b855190915083165b8281146182c2578186106182aa5761829d8b8b618c0f565b9650505050505050615e74565b856182b481619e1b565b965050838651169050618285565b859650505050505050615e74565b508383206000905b6182e28689618dcc565b821161831f578583208082036182fe5783945050505050615e74565b618309600185618c0f565b935050818061831790619e1b565b9250506182d8565b505b61832b8787618c0f565b979650505050505050565b604080518082019091526000808252602082015260006183688560000151866020015186600001518760200151618216565b6020808701805191860191909152519091506183849082618dcc565b8352845160208601516183979190618c0f565b81036183a657600085526183d8565b835183516183b49190618c0f565b855186906183c3908390618dcc565b90525083516183d29082618c0f565b60208601525b50909392505050565b6020811061841957815183526183f8602084618c0f565b9250618405602083618c0f565b9150618412602082618dcc565b90506183e1565b600019811561844857600161842f836020618dcc565b61843b90610100619f33565b6184459190618dcc565b90505b9151835183169219169190911790915250565b606060006184698484614947565b805160208083015160405193945061848393909101619f56565b60405160208183030381529060405291505092915050565b81518151600091908111156184ae575081515b6020808501519084015160005b838110156185675782518251808214618537576000196020871015618516576001846184e8896020618dcc565b6184f29190618c0f565b6184fd906008619e35565b618508906002619f33565b6185129190618dcc565b1990505b81811683821681810391146185345797506144fd9650505050505050565b50505b618542602086618c0f565b945061854f602085618c0f565b935050506020816185609190618c0f565b90506184bb565b5084518651614ff59190619fae565b610c9f80619fcf83390190565b6112a68061ac6e83390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016185d36185d8565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016185d36040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561868a5783516001600160a01b0316835260209384019390920191600101618663565b509095945050505050565b60005b838110156186b0578181015183820152602001618698565b50506000910152565b600081518084526186d1816020860160208601618695565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156187e1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156187c7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526187b18486516186b9565b6020958601959094509290920191600101618777565b50919750505060209485019492909201915060010161870d565b50929695505050505050565b600081518084526020840193506020830160005b828110156188415781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101618801565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156187e1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526188b760408801826186b9565b90506020820151915086810360208801526188d281836187ed565b965050506020938401939190910190600101618873565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156187e1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261894b8583516186b9565b94506020938401939190910190600101618911565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156187e1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526189e160408701826187ed565b9550506020938401939190910190600101618988565b600181811c90821680618a0b57607f821691505b602082108103616740577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a0606085015260008154618a8e816189f7565b8060a08801526001821660008114618aad5760018114618ae757618b1b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b8901019350618b1b565b84600052602060002060005b83811015618b125781548a820160c00152600190910190602001618af3565b890160c0019450505b50505060038401546080860152809250505092915050565b6001600160a01b03861681528460208201526001600160a01b038416604082015260a060608201526000618b6a60a08301856186b9565b8281036080840152618b7c8185618a44565b98975050505050505050565b6001600160a01b0383168152604060208201526000615e746040830184618a44565b8381526001600160a01b0383166020820152608060408201526000608082015260a06060820152600061672660a0830184618a44565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156144fd576144fd618be0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f82111561083d57806000526020600020601f840160051c81016020851015618c785750805b601f840160051c820191505b81811015611a985760008155600101618c84565b815167ffffffffffffffff811115618cb257618cb2618c22565b618cc681618cc084546189f7565b84618c51565b6020601f821160018114618cfa5760008315618ce25750848201515b600019600385901b1c1916600184901b178455611a98565b600084815260208120601f198516915b82811015618d2a5787850151825560209485019460019092019101618d0a565b5084821015618d485786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215618d6957600080fd5b5051919050565b600060208284031215618d8257600080fd5b8151801515811461457757600080fd5b8481526001600160a01b0384166020820152608060408201526000618dba60808301856186b9565b828103606084015261832b8185618a44565b818103818111156144fd576144fd618be0565b600082618e15577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b0384168152606060208201526000618e3c60608301856186b9565b8281036040840152614ff58185618a44565b6001600160a01b03851681528360208201526001600160a01b0383166040820152608060608201526000614ff56080830184618a44565b604081526000618e9860408301856186b9565b82810360208401526145738185618a44565b6001600160a01b0383168152604060208201526000615e7460408301846186b9565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351618f0481601a850160208801618695565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351618f4181601c840160208801618695565b01601c01949350505050565b60208152600061457760208301846186b9565b600060208284031215618f7257600080fd5b81516001600160a01b038116811461457757600080fd5b6040516060810167ffffffffffffffff81118282101715618fac57618fac618c22565b60405290565b60008067ffffffffffffffff841115618fcd57618fcd618c22565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715618ffc57618ffc618c22565b60405283815290508082840185101561901457600080fd5b616243846020830185618695565b600082601f83011261903357600080fd5b61457783835160208501618fb2565b60006020828403121561905457600080fd5b815167ffffffffffffffff81111561906b57600080fd5b6144f984828501619022565b60008351619089818460208801618695565b83519083019061909d818360208801618695565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516190de81601a850160208801618695565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161911b816033840160208801618695565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061457760808301846186b9565b6000602082840312156191aa57600080fd5b815167ffffffffffffffff8111156191c157600080fd5b8201601f810184136191d257600080fd5b6144f984825160208401618fb2565b600085516191f3818460208a01618695565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161922d816001840160208a01618695565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161926b816002840160208901618695565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516192ad816002840160208801618695565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006192f860408301846186b9565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161936f81601f850160208701618695565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006193dc60408301846186b9565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061942e60408301846186b9565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516194a5816014850160208701618695565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b6040815260006194ec60408301856186b9565b828103602084015261457381856186b9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619565816001850160208701618695565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516195ab818460208701618695565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161965e81604b850160208701618695565b91909101604b0192915050565b600060ff821660ff810361968157619681618be0565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c694000000000000000000000000000000000000000000000006020820152600082516196e8816029850160208701618695565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061457760808301846186b9565b60006020828403121561974e57600080fd5b815167ffffffffffffffff81111561976557600080fd5b82016060818503121561977757600080fd5b61977f618f89565b81518060030b811461979057600080fd5b8152602082015167ffffffffffffffff8111156197ac57600080fd5b6197b886828501619022565b602083015250604082015167ffffffffffffffff8111156197d857600080fd5b6197e486828501619022565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619850816021850160208701618695565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351619a3c816021850160208801618695565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351619a7981602e840160208801618695565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a2000000000000000000000000000000000000000000000006020820152600082516196e8816029850160208701618695565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251619b41816022850160208701618695565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251619b8681600e850160208701618695565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351619c64816018850160208801618695565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351619ca181601c840160208801618695565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619da7818460208701618695565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251619e0e81601c850160208701618695565b91909101601c0192915050565b60006000198203619e2e57619e2e618be0565b5060010190565b80820281158282048414176144fd576144fd618be0565b6001815b6001841115619e8757808504811115619e6b57619e6b618be0565b6001841615619e7957908102905b60019390931c928002619e50565b935093915050565b600082619e9e575060016144fd565b81619eab575060006144fd565b8160018114619ec15760028114619ecb57619ee7565b60019150506144fd565b60ff841115619edc57619edc618be0565b50506001821b6144fd565b5060208310610133831016604e8410600b8410161715619f0a575081810a6144fd565b619f176000198484619e4c565b8060001904821115619f2b57619f2b618be0565b029392505050565b60006145778383619e8f565b600081619f4e57619f4e618be0565b506000190190565b60008351619f68818460208801618695565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619fa2816001840160208801618695565b01600101949350505050565b818103600083128015838313168383128216171561783b5761783b618be056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122001ec0ce060384773f3d3389fab7bed652c6b8ee389a7471cce10d00d87a75a0c64736f6c634300081a0033a264697066735822122012f083735e58619bafe4d5497340408ed87df3e833a42d0bbd35442c56bd802964736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallWithPayloadFailsIfDestinationIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallWithPayloadFailsIfPayloadSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustody\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyFailsIfPayloadSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayloadFailsIfPayloadSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositERC20ToCustodyWithPayloadFailsIfTokenIsNotWhitelisted\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTssWithPayload\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositEthToTssWithPayloadFailsIfPayloadSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testDepositZetaToConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositERC20ToCustodyWithPayloadIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfPayloadSizeExceeded\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfAmountIs0\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testFailDepositEthToTssWithPayloadIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedOnCall\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZETANotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055620f4240602c55348015603357600080fd5b5061bf49806100436000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c8063916a17c611610145578063ba414fa6116100bd578063e20c9f711161008c578063e85c5a0711610071578063e85c5a07146103a2578063f96c02df146103aa578063fa7626d4146103b257600080fd5b8063e20c9f7114610392578063e306a9781461039a57600080fd5b8063ba414fa614610362578063bb93f11e1461037a578063c13d738f14610382578063d896e2611461038a57600080fd5b8063aa030c1c11610114578063b1409f71116100f9578063b1409f711461034a578063b284906314610352578063b5508aa91461035a57600080fd5b8063aa030c1c1461033a578063b0464fdc1461034257600080fd5b8063916a17c61461030d57806395cd0445146103225780639fd1e5971461032a578063a48abc2a1461033257600080fd5b80633e5e3c23116101d857806351da903d116101a757806366d9a9a01161018c57806366d9a9a0146102db5780637478fda0146102f057806385226c81146102f857600080fd5b806351da903d146102cb5780636459542a146102d357600080fd5b80633e5e3c23146102ab5780633f7286f4146102b3578063466f332e146102bb5780634ce25c0a146102c357600080fd5b80631806a9a5116102145780631806a9a5146102685780631ed7831c146102705780632ade38801461028e57806330f7c04f146102a357600080fd5b806305a898e21461024657806306978ca3146102505780630724d8e3146102585780630a9254e414610260575b600080fd5b61024e6103bf565b005b61024e610576565b61024e61068e565b61024e610842565b61024e61138b565b610278611488565b6040516102859190618649565b60405180910390f35b6102966114ea565b60405161028591906186e5565b61024e61162c565b610278611a9f565b610278611aff565b61024e611b5f565b61024e611e51565b61024e6120ed565b61024e61224e565b6102e3612647565b604051610285919061884b565b61024e6127c9565b6103006128cc565b60405161028591906188e9565b61031561299c565b6040516102859190618960565b61024e612a97565b61024e612ded565b61024e61300f565b61024e613203565b6103156133c0565b61024e6134bb565b61024e61376d565b61030061397b565b61036a613a4b565b6040519015158152602001610285565b61024e613b1f565b61024e613c16565b61024e613d0d565b610278613e88565b61024e613ee8565b61024e6140ce565b61024e61434f565b601f5461036a9060ff1681565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb3906104b7906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b1580156104d157600080fd5b505af11580156104e5573d6000803e3d6000fd5b50506020546023546040517fd09e3b780000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063d09e3b7893506105409260009288929116908790602890600401618b33565b600060405180830381600087803b15801561055a57600080fd5b505af115801561056e573d6000803e3d6000fd5b505050505050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e73756666696369656e74455448416d6f756e7400000000000000000000006044820152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561060c57600080fd5b505af1158015610620573d6000803e3d6000fd5b50506020546026546040517f726ac97c0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063726ac97c93508592610675921690602890600401618b88565b6000604051808303818588803b15801561055a57600080fd5b6027546020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039182166084820152620186a092919091163190737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561072a57600080fd5b505af115801561073e573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c9061078d908690600090602890618baa565b60405180910390a36020546026546040517f726ac97c0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263726ac97c9286926107e89290911690602890600401618b88565b6000604051808303818588803b15801561080157600080fd5b505af1158015610815573d6000803e3d6000fd5b50506027546001600160a01b031631925061083d915061083790508484618c0f565b82614465565b505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805490911661567817905560405161089490618576565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610919573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055602754604051911690819061096290618583565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610995573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260275460255492519086169481019490945260448401929092529092166064820152610a8791906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526144e4565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602080549190920483167fffffffffffffffffffffffff000000000000000000000000000000000000000090911681178255604080518082018252601081527f4552433230437573746f64792e736f6c000000000000000000000000000000009381019390935260275460255491516024810193909352841660448301529092166064830152610b5791608401610a2a565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602180549190920483167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055604080518082018252601a81527f5a657461436f6e6e6563746f724e6f6e4e61746976652e736f6c00000000000060208083019190915254602480546027546025549551938716928401929092528516604483015284166064820152919092166084820152610c90919060a40160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff8c8765e000000000000000000000000000000000000000000000000000000001790526144e4565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0393841681029190911791829055602280549190920483167fffffffffffffffffffffffff00000000000000000000000000000000000000009091161790556027546040517fca669fa700000000000000000000000000000000000000000000000000000000815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610d6857600080fd5b505af1158015610d7c573d6000803e3d6000fd5b5050602480546027546022546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b158015610def57600080fd5b505af1158015610e03573d6000803e3d6000fd5b50506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610e8757600080fd5b505af1158015610e9b573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610f1157600080fd5b505af1158015610f25573d6000803e3d6000fd5b50506020546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529116925063ae7a3a6f9150602401600060405180830381600087803b158015610f8b57600080fd5b505af1158015610f9f573d6000803e3d6000fd5b50506020546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152911692506310188aef9150602401600060405180830381600087803b15801561100557600080fd5b505af1158015611019573d6000803e3d6000fd5b50506021546023546040517f9b19251a0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639b19251a9150602401600060405180830381600087803b15801561107f57600080fd5b505af1158015611093573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110f557600080fd5b505af1158015611109573d6000803e3d6000fd5b5050602354602554602c546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152911692506340c10f199150604401600060405180830381600087803b15801561117a57600080fd5b505af115801561118e573d6000803e3d6000fd5b50506027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561120457600080fd5b505af1158015611218573d6000803e3d6000fd5b5050602254602554602c546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526024810191909152600060448201529116925063106e62909150606401600060405180830381600087803b15801561129057600080fd5b505af11580156112a4573d6000803e3d6000fd5b50506040805160a08101825261032180825260016020808401918252838501928352845190810190945260008085526060840185905260808401528251602880549251151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009093166001600160a01b0392831617929092178255915160298054919093167fffffffffffffffffffffffff000000000000000000000000000000000000000091909116179091559093509150602a9061137b9082618c98565b5060808201518160030155905050565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561142157600080fd5b505af1158015611435573d6000803e3d6000fd5b50506020546040517f726ac97c0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063726ac97c9150839061067590600090602890600401618b88565b606060168054806020026020016040519081016040528092919081815260200182805480156114e057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114c2575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561162357600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561160c57838290600052602060002001805461157f906189f7565b80601f01602080910402602001604051908101604052809291908181526020018280546115ab906189f7565b80156115f85780601f106115cd576101008083540402835291602001916115f8565b820191906000526020600020905b8154815290600101906020018083116115db57829003601f168201915b505050505081526020019060010190611560565b50505050815250508152602001906001019061150e565b50505050905090565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190618d57565b90506116c9600082614465565b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101879052929350169063095ea7b3906044016020604051808303816000875af11580156117ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d09190618d70565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561185f57600080fd5b505af1158015611873573d6000803e3d6000fd5b50506026546025546023546040516001600160a01b03938416955091831693507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c926118c9928992909116908790602890618d92565b60405180910390a36020546026546023546040517fd09e3b780000000000000000000000000000000000000000000000000000000081526001600160a01b039384169363d09e3b789361192d93908216928992909116908790602890600401618b33565b600060405180830381600087803b15801561194757600080fd5b505af115801561195b573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156119c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119eb9190618d57565b90506119f78482614465565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611a61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a859190618d57565b9050611a9885602c546108379190618dcc565b5050505050565b606060188054806020026020016040519081016040528092919081815260200182805480156114e0576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116114c2575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156114e0576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116114c2575050505050905090565b60208054604080517fa2ba19340000000000000000000000000000000000000000000000000000000081529051620186a0936000936002936001600160a01b039091169263a2ba1934926004808401939192918290030181865afa158015611bcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bef9190618d57565b611bf99190618ddf565b67ffffffffffffffff811115611c1157611c11618c22565b6040519080825280601f01601f191660200182016040528015611c3b576020820181803683370190505b5060208054604080517fa2ba193400000000000000000000000000000000000000000000000000000000815290519394506002936001600160a01b039092169263a2ba1934926004808401938290030181865afa158015611ca0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc49190618d57565b611cce9190618ddf565b611cd9906001618c0f565b67ffffffffffffffff811115611cf157611cf1618c22565b6040519080825280601f01601f191660200182016040528015611d1b576020820181803683370190505b50602a90611d299082618c98565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f386691aa000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024015b600060405180830381600087803b158015611db057600080fd5b505af1158015611dc4573d6000803e3d6000fd5b50506020546026546040517f744b9b8b0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063744b9b8b93508692611e1b9216908690602890600401618e1a565b6000604051808303818588803b158015611e3457600080fd5b505af1158015611e48573d6000803e3d6000fd5b50505050505050565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a06024820181905292919091169063095ea7b3906044016020604051808303816000875af1158015611ec6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eea9190618d70565b5060208054604080517fa2ba193400000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169263a2ba1934926004808401938290030181865afa158015611f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6d9190618d57565b611f78906001618c0f565b67ffffffffffffffff811115611f9057611f90618c22565b6040519080825280601f01601f191660200182016040528015611fba576020820181803683370190505b50602a90611fc89082618c98565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f386691aa000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024015b600060405180830381600087803b15801561204f57600080fd5b505af1158015612063573d6000803e3d6000fd5b50506020546026546023546040517f102614b00000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063102614b094506120bf939283169287921690602890600401618e4e565b600060405180830381600087803b1580156120d957600080fd5b505af1158015611a98573d6000803e3d6000fd5b6026546040516001600160a01b03909116602482015260009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b1580156121e757600080fd5b505af11580156121fb573d6000803e3d6000fd5b50506020546040517f1becceb40000000000000000000000000000000000000000000000000000000081526001600160a01b039091169250631becceb491506120bf906000908590602890600401618e1a565b6023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa1580156122ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122de9190618d57565b90506122eb600082614465565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af1158015612359573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237d9190618d70565b506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561240c57600080fd5b505af1158015612420573d6000803e3d6000fd5b50506026546025546023546040516001600160a01b03938416955091831693507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c9261247492889290911690602890618baa565b60405180910390a36020546026546023546040517f102614b00000000000000000000000000000000000000000000000000000000081526001600160a01b039384169363102614b0936124d69390821692889290911690602890600401618e4e565b600060405180830381600087803b1580156124f057600080fd5b505af1158015612504573d6000803e3d6000fd5b50506023546021546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612570573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125949190618d57565b90506125a08382614465565b6023546025546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561260a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262e9190618d57565b905061264184602c546108379190618dcc565b50505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015611623578382906000526020600020906002020160405180604001604052908160008201805461269e906189f7565b80601f01602080910402602001604051908101604052809291908181526020018280546126ca906189f7565b80156127175780601f106126ec57610100808354040283529160200191612717565b820191906000526020600020905b8154815290600101906020018083116126fa57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156127b157602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161275e5790505b5050505050815250508152602001906001019061266b565b6040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5a65726f416464726573730000000000000000000000000000000000000000006044820152600190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561285f57600080fd5b505af1158015612873573d6000803e3d6000fd5b50506020546023546040517f102614b00000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063102614b093506120bf926000928792911690602890600401618e4e565b6060601a805480602002602001604051908101604052809291908181526020016000905b8282101561162357838290600052602060002001805461290f906189f7565b80601f016020809104026020016040519081016040528092919081815260200182805461293b906189f7565b80156129885780601f1061295d57610100808354040283529160200191612988565b820191906000526020600020905b81548152906001019060200180831161296b57829003601f168201915b5050505050815260200190600101906128f0565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156116235760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612a7f57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612a2c5790505b505050505081525050815260200190600101906129c0565b60208054604080517fa2ba19340000000000000000000000000000000000000000000000000000000081529051620186a0936000936002936001600160a01b039091169263a2ba1934926004808401939192918290030181865afa158015612b03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b279190618d57565b612b319190618ddf565b67ffffffffffffffff811115612b4957612b49618c22565b6040519080825280601f01601f191660200182016040528015612b73576020820181803683370190505b5060208054604080517fa2ba193400000000000000000000000000000000000000000000000000000000815290519394506002936001600160a01b039092169263a2ba1934926004808401938290030181865afa158015612bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfc9190618d57565b612c069190618ddf565b612c11906001618c0f565b67ffffffffffffffff811115612c2957612c29618c22565b6040519080825280601f01601f191660200182016040528015612c53576020820181803683370190505b50602a90612c619082618c98565b506023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810185905291169063095ea7b3906044016020604051808303816000875af1158015612cd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf49190618d70565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f386691aa000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e0906024015b600060405180830381600087803b158015612d7b57600080fd5b505af1158015612d8f573d6000803e3d6000fd5b50506020546026546023546040517fd09e3b780000000000000000000000000000000000000000000000000000000081526001600160a01b03938416955063d09e3b7894506105409392831692889216908790602890600401618b33565b6027546026546040516001600160a01b039182166024820152620186a09291909116319060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015612efe57600080fd5b505af1158015612f12573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c90612f639087906000908790602890618d92565b60405180910390a36020546026546040517f744b9b8b0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263744b9b8b928792612fc092909116908690602890600401618e1a565b6000604051808303818588803b158015612fd957600080fd5b505af1158015612fed573d6000803e3d6000fd5b50506027546001600160a01b0316319250612641915061083790508585618c0f565b60208054604080517fa2ba193400000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169263a2ba1934926004808401938290030181865afa15801561306d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130919190618d57565b61309c906001618c0f565b67ffffffffffffffff8111156130b4576130b4618c22565b6040519080825280601f01601f1916602001820160405280156130de576020820181803683370190505b50602a906130ec9082618c98565b506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f5061796c6f616453697a654578636565646564000000000000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401600060405180830381600087803b15801561318057600080fd5b505af1158015613194573d6000803e3d6000fd5b50506020546026546040517f726ac97c0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316945063726ac97c93506001926131ea921690602890600401618b88565b6000604051808303818588803b1580156120d957600080fd5b6026546040516001600160a01b03909116602482015260009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae760000000000000000000000000000000000000000000000000000000001790525490517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561330657600080fd5b505af115801561331a573d6000803e3d6000fd5b50506026546025546040516001600160a01b039283169450911691507fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97490613366908590602890618e85565b60405180910390a36020546026546040517f1becceb40000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692631becceb4926120bf929116908590602890600401618e1a565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156116235760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156134a357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116134505790505b505050505081525050815260200190600101906133e4565b60208054604080517fa2ba193400000000000000000000000000000000000000000000000000000000815290516000936002936001600160a01b03169263a2ba193492600480830193928290030181865afa15801561351e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135429190618d57565b61354c9190618ddf565b67ffffffffffffffff81111561356457613564618c22565b6040519080825280601f01601f19166020018201604052801561358e576020820181803683370190505b5060208054604080517fa2ba193400000000000000000000000000000000000000000000000000000000815290519394506002936001600160a01b039092169263a2ba1934926004808401938290030181865afa1580156135f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136179190618d57565b6136219190618ddf565b61362c906001618c0f565b67ffffffffffffffff81111561364457613644618c22565b6040519080825280601f01601f19166020018201604052801561366e576020820181803683370190505b50602a9061367c9082618c98565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f386691aa000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561370257600080fd5b505af1158015613716573d6000803e3d6000fd5b50506020546026546040517f1becceb40000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450631becceb493506120bf92909116908590602890600401618e1a565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a06024820181905292919091169063095ea7b3906044016020604051808303816000875af11580156137e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138069190618d70565b506025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561387957600080fd5b505af115801561388d573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b1580156138f357600080fd5b505af1158015613907573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fac2175f1000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401612035565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156116235783829060005260206000200180546139be906189f7565b80601f01602080910402602001604051908101604052809291908181526020018280546139ea906189f7565b8015613a375780601f10613a0c57610100808354040283529160200191613a37565b820191906000526020600020905b815481529060010190602001808311613a1a57829003601f168201915b50505050508152602001906001019061399f565b60085460009060ff1615613a63575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b189190618d57565b1415905090565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390612d619060040160208082526017908201527f496e73756666696369656e744552433230416d6f756e74000000000000000000604082015260600190565b6026546040516001600160a01b039091166024820152600090819060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390611d969060040160208082526015908201527f496e73756666696369656e74455448416d6f756e740000000000000000000000604082015260600190565b6026546040516001600160a01b03909116602482015260019060009060440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390613e05906004016020808252600b908201527f5a65726f41646472657373000000000000000000000000000000000000000000604082015260600190565b600060405180830381600087803b158015613e1f57600080fd5b505af1158015613e33573d6000803e3d6000fd5b50506020546040517f744b9b8b0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063744b9b8b91508490611e1b906000908690602890600401618e1a565b606060158054806020026020016040519081016040528092919081815260200182805480156114e0576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116114c2575050505050905090565b602480546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620186a093810184905291169063095ea7b3906044016020604051808303816000875af1158015613f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f7e9190618d70565b506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fe4dd681d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561400457600080fd5b505af1158015614018573d6000803e3d6000fd5b50506026546025546024546040516001600160a01b03938416955091831693507fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c9261406c92879290911690602890618baa565b60405180910390a36020546026546024546040517f102614b00000000000000000000000000000000000000000000000000000000081526001600160a01b039384169363102614b0936120bf9390821692879290911690602890600401618e4e565b6026546040516001600160a01b039091166024820152620186a09060009060440160408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f84fae76000000000000000000000000000000000000000000000000000000000179052602354905491517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260248101869052929350169063095ea7b3906044016020604051808303816000875af11580156141b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141da9190618d70565b506025546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561424d57600080fd5b505af1158015614261573d6000803e3d6000fd5b50506021546023546040517f9a5904270000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169250639a5904279150602401600060405180830381600087803b1580156142c757600080fd5b505af11580156142db573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fac2175f1000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401612d61565b6023546020546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260006024820181905292919091169063095ea7b3906044016020604051808303816000875af11580156143c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143e69190618d70565b506040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e73756666696369656e744552433230416d6f756e740000000000000000006044820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390606401612035565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b1580156144d057600080fd5b505afa15801561056e573d6000803e3d6000fd5b60006144ee618590565b6144f9848483614503565b9150505b92915050565b600080614510858461457e565b90506145736040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161455e929190618eaa565b6040516020818303038152906040528561458a565b9150505b9392505050565b600061457783836145b8565b60c081015151600090156145ae576145a784848460c001516145d3565b9050614577565b6145a78484614779565b60006145c48383614864565b6145778383602001518461458a565b6000806145de614874565b905060006145ec8683614947565b905060006146038260600151836020015185614ded565b9050600061461383838989614fff565b9050600061462082615e7c565b602081015181519192509060030b156146935789826040015160405160200161464a929190618ecc565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261468a91600401618f4d565b60405180910390fd5b60006146d66040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161604b565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90614729908490600401618f4d565b602060405180830381865afa158015614746573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061476a9190618f60565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906147ce908790600401618f4d565b600060405180830381865afa1580156147eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526148139190810190619042565b90506000614841828560405160200161482d929190619077565b60405160208183030381529060405261624b565b90506001600160a01b0381166144f957848460405160200161464a9291906190a6565b6148708282600061625e565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906148fb908490600401619151565b600060405180830381865afa158015614918573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526149409190810190619198565b9250505090565b6149796040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506149c46040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6149cd85616361565b602082015260006149dd86616746565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015614a1f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614a479190810190619198565b86838560200151604051602001614a6194939291906191e1565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190614ab9908590600401618f4d565b600060405180830381865afa158015614ad6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614afe9190810190619198565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690614b469084906004016192e5565b602060405180830381865afa158015614b63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b879190618d70565b614b9c578160405160200161464a9190619337565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614be19084906004016193c9565b600060405180830381865afa158015614bfe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614c269190810190619198565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690614c6d90849060040161941b565b602060405180830381865afa158015614c8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cae9190618d70565b15614d43576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614cf890849060040161941b565b600060405180830381865afa158015614d15573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614d3d9190810190619198565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001614d68919061946d565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614d949291906194d9565b600060405180830381865afa158015614db1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614dd99190810190619198565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081614e095790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110614e6957614e696194fe565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110614ebd57614ebd6194fe565b602002602001018190525084604051602001614ed9919061952d565b60405160208183030381529060405281600281518110614efb57614efb6194fe565b602002602001018190525082604051602001614f179190619599565b60405160208183030381529060405281600381518110614f3957614f396194fe565b60200260200101819052506000614f4f82615e7c565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250614fe090604080518082018252600080825260209182015281518083019092528451825280850190820152906169c9565b614ff5578560405160200161464a91906195da565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d901561504f565b511590565b6151c35782602001511561510b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161468a565b8260c00151156151c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161468a565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816151dc57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806152379061966b565b935060ff168151811061524c5761524c6194fe565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161529d919061968a565b6040516020818303038152906040528282806152b89061966b565b935060ff16815181106152cd576152cd6194fe565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061531a9061966b565b935060ff168151811061532f5761532f6194fe565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061537c9061966b565b935060ff1681518110615391576153916194fe565b602002602001018190525087602001518282806153ad9061966b565b935060ff16815181106153c2576153c26194fe565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061540f9061966b565b935060ff1681518110615424576154246194fe565b60209081029190910101528751828261543c8161966b565b935060ff1681518110615451576154516194fe565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061549e9061966b565b935060ff16815181106154b3576154b36194fe565b60200260200101819052506154c746616a2a565b82826154d28161966b565b935060ff16815181106154e7576154e76194fe565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806155349061966b565b935060ff1681518110615549576155496194fe565b6020026020010181905250868282806155619061966b565b935060ff1681518110615576576155766194fe565b602090810291909101015285511561569d5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826155c78161966b565b935060ff16815181106155dc576155dc6194fe565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061562c908990600401618f4d565b600060405180830381865afa158015615649573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526156719190810190619198565b828261567c8161966b565b935060ff1681518110615691576156916194fe565b60200260200101819052505b84602001511561576d5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826156e68161966b565b935060ff16815181106156fb576156fb6194fe565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806157489061966b565b935060ff168151811061575d5761575d6194fe565b6020026020010181905250615934565b6157a561504a8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6158385760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826157e88161966b565b935060ff16815181106157fd576157fd6194fe565b60200260200101819052508460a0015160405160200161581d919061952d565b6040516020818303038152906040528282806157489061966b565b8460c0015115801561587b57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261587990511590565b155b156159345760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826158bf8161966b565b935060ff16815181106158d4576158d46194fe565b60200260200101819052506158e888616aca565b6040516020016158f8919061952d565b6040516020818303038152906040528282806159139061966b565b935060ff1681518110615928576159286194fe565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261596890511590565b6159fd5760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826159ab8161966b565b935060ff16815181106159c0576159c06194fe565b602002602001018190525084604001518282806159dc9061966b565b935060ff16815181106159f1576159f16194fe565b60200260200101819052505b606085015115615b1e5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282615a468161966b565b935060ff1681518110615a5b57615a5b6194fe565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015615aca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615af29190810190619198565b8282615afd8161966b565b935060ff1681518110615b1257615b126194fe565b60200260200101819052505b60e08501515115615bc55760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282615b688161966b565b935060ff1681518110615b7d57615b7d6194fe565b6020026020010181905250615b998560e0015160000151616a2a565b8282615ba48161966b565b935060ff1681518110615bb957615bb96194fe565b60200260200101819052505b60e08501516020015115615c6f5760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282615c128161966b565b935060ff1681518110615c2757615c276194fe565b6020026020010181905250615c438560e0015160200151616a2a565b8282615c4e8161966b565b935060ff1681518110615c6357615c636194fe565b60200260200101819052505b60e08501516040015115615d195760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282615cbc8161966b565b935060ff1681518110615cd157615cd16194fe565b6020026020010181905250615ced8560e0015160400151616a2a565b8282615cf88161966b565b935060ff1681518110615d0d57615d0d6194fe565b60200260200101819052505b60e08501516060015115615dc35760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282615d668161966b565b935060ff1681518110615d7b57615d7b6194fe565b6020026020010181905250615d978560e0015160600151616a2a565b8282615da28161966b565b935060ff1681518110615db757615db76194fe565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615de157615de1618c22565b604051908082528060200260200182016040528015615e1457816020015b6060815260200190600190039081615dff5790505b50905060005b8260ff168160ff161015615e6d57838160ff1681518110615e3d57615e3d6194fe565b6020026020010151828260ff1681518110615e5a57615e5a6194fe565b6020908102919091010152600101615e1a565b5093505050505b949350505050565b615ea36040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91615f29918691016196f5565b600060405180830381865afa158015615f46573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615f6e9190810190619198565b90506000615f7c86836175b9565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401615fac91906188e9565b6000604051808303816000875af1158015615fcb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615ff3919081019061973c565b805190915060030b1580159061600c5750602081015151155b801561601b5750604081015151155b15614ff55781600081518110616033576160336194fe565b602002602001015160405160200161464a91906197f2565b606060006160808560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506160b79082905b9061770e565b156162145760006161348261612e846161286160fa8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90617735565b90617797565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061619890829061770e565b1561620257604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526161ff905b829061781c565b90505b61620b81617842565b92505050614577565b821561622d57848460405160200161464a9291906199de565b5050604080516020810190915260008152614577565b509392505050565b6000808251602084016000f09392505050565b8160a001511561626d57505050565b600061627a8484846178ab565b9050600061628782615e7c565b602081015181519192509060030b1580156163235750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616323906040805180820182526000808252602091820152815180830190925284518252808501908201526160b1565b1561633057505050505050565b6040820151511561635057816040015160405160200161464a9190619a85565b8060405160200161464a9190619ae3565b606060006163968360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506163fb905b82906169c9565b1561646a57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261457790616465908390617e46565b617842565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164cc905b8290617ed0565b60010361659957604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616532906161f8565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261457790616465905b839061781c565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165f8906163f4565b1561672f57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290616660908390617f6a565b9050600081600183516166739190618dcc565b81518110616683576166836194fe565b602002602001015190506167266164656166f96040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290617e46565b95945050505050565b8260405160200161464a9190619b4e565b50919050565b6060600061677b8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506167dd906163f4565b156167eb5761457781617842565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261684a906164c5565b6001036168b457604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526145779061646590616592565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616913906163f4565b1561672f57604080518082018252600181527f2f0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082018190528451808601909552925184528301529061697b908390617f6a565b90506001815111156169b75780600282516169969190618dcc565b815181106169a6576169a66194fe565b602002602001015192505050919050565b508260405160200161464a9190619b4e565b8051825160009111156169de575060006144fd565b815183516020850151600092916169f491618c0f565b6169fe9190618dcc565b905082602001518103616a155760019150506144fd565b82516020840151819020912014905092915050565b60606000616a378361800f565b600101905060008167ffffffffffffffff811115616a5757616a57618c22565b6040519080825280601f01601f191660200182016040528015616a81576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084616a8b57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091616b56905b82906180f1565b15616b9657505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616bf590616b4f565b15616c3557505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616c9490616b4f565b15616cd457505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d3390616b4f565b80616d985750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616d9890616b4f565b15616dd857505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e3790616b4f565b80616e9c5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616e9c90616b4f565b15616edc57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616f3b90616b4f565b80616fa05750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616fa090616b4f565b15616fe057505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261703f90616b4f565b806170a45750604080518082018252601181527f4c47504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526170a490616b4f565b156170e457505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261714390616b4f565b1561718357505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526171e290616b4f565b1561722257505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261728190616b4f565b156172c157505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261732090616b4f565b1561736057505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526173bf90616b4f565b156173ff57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261745e90616b4f565b806174c35750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526174c390616b4f565b1561750357505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261756290616b4f565b156175a257505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b6040808401518451915161464a9290602001619c2c565b60608060005b845181101561764457818582815181106175db576175db6194fe565b60200260200101516040516020016175f4929190619077565b6040516020818303038152906040529150600185516176139190618dcc565b811461763c578160405160200161762a9190619d95565b60405160208183030381529060405291505b6001016175bf565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161765d5790505090508381600081518110617688576176886194fe565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106176dc576176dc6194fe565b602002602001018190525081816002815181106176fb576176fb6194fe565b6020908102919091010152949350505050565b602080830151835183519284015160009361772c9291849190618105565b14159392505050565b604080518082019091526000808252602082015260006177678460000151856020015185600001518660200151618216565b90508360200151816177799190618dcc565b84518590617788908390618dcc565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156177bc5750816144fd565b60208083015190840151600191146177e35750815160208481015190840151829020919020145b8015617814578251845185906177fa908390618dcc565b9052508251602085018051617810908390618c0f565b9052505b509192915050565b604080518082019091526000808252602082015261783b838383618336565b5092915050565b60606000826000015167ffffffffffffffff81111561786357617863618c22565b6040519080825280601f01601f19166020018201604052801561788d576020820181803683370190505b509050600060208201905061783b81856020015186600001516183e1565b606060006178b7614874565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816178d457905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061792f9061966b565b935060ff1681518110617944576179446194fe565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016179959190619dd6565b6040516020818303038152906040528282806179b09061966b565b935060ff16815181106179c5576179c56194fe565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280617a129061966b565b935060ff1681518110617a2757617a276194fe565b602002602001018190525082604051602001617a439190619599565b604051602081830303815290604052828280617a5e9061966b565b935060ff1681518110617a7357617a736194fe565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280617ac09061966b565b935060ff1681518110617ad557617ad56194fe565b6020026020010181905250617aea878461845b565b8282617af58161966b565b935060ff1681518110617b0a57617b0a6194fe565b602090810291909101015285515115617bb65760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282617b5c8161966b565b935060ff1681518110617b7157617b716194fe565b6020026020010181905250617b8a86600001518461845b565b8282617b958161966b565b935060ff1681518110617baa57617baa6194fe565b60200260200101819052505b856080015115617c245760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282617bff8161966b565b935060ff1681518110617c1457617c146194fe565b6020026020010181905250617c8a565b8415617c8a5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282617c698161966b565b935060ff1681518110617c7e57617c7e6194fe565b60200260200101819052505b60408601515115617d265760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282617cd48161966b565b935060ff1681518110617ce957617ce96194fe565b60200260200101819052508560400151828280617d059061966b565b935060ff1681518110617d1a57617d1a6194fe565b60200260200101819052505b856060015115617d905760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282617d6f8161966b565b935060ff1681518110617d8457617d846194fe565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617dae57617dae618c22565b604051908082528060200260200182016040528015617de157816020015b6060815260200190600190039081617dcc5790505b50905060005b8260ff168160ff161015617e3a57838160ff1681518110617e0a57617e0a6194fe565b6020026020010151828260ff1681518110617e2757617e276194fe565b6020908102919091010152600101617de7565b50979650505050505050565b6040805180820190915260008082526020820152815183511015617e6b5750816144fd565b81518351602085015160009291617e8191618c0f565b617e8b9190618dcc565b60208401519091506001908214617eac575082516020840151819020908220145b8015617ec757835185518690617ec3908390618dcc565b9052505b50929392505050565b6000808260000151617ef48560000151866020015186600001518760200151618216565b617efe9190618c0f565b90505b83516020850151617f129190618c0f565b811161783b5781617f2281619e1b565b9250508260000151617f59856020015183617f3d9190618dcc565b8651617f499190618dcc565b8386600001518760200151618216565b617f639190618c0f565b9050617f01565b60606000617f788484617ed0565b617f83906001618c0f565b67ffffffffffffffff811115617f9b57617f9b618c22565b604051908082528060200260200182016040528015617fce57816020015b6060815260200190600190039081617fb95790505b50905060005b815181101561624357617fea616465868661781c565b828281518110617ffc57617ffc6194fe565b6020908102919091010152600101617fd4565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310618058577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310618084576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106180a257662386f26fc10000830492506010015b6305f5e10083106180ba576305f5e100830492506008015b61271083106180ce57612710830492506004015b606483106180e0576064830492506002015b600a83106144fd5760010192915050565b60006180fd838361849b565b159392505050565b60008085841161820c57602084116181b8576000841561815057600161812c866020618dcc565b618137906008619e35565b618142906002619f33565b61814c9190618dcc565b1990505b835181168561815f8989618c0f565b6181699190618dcc565b805190935082165b8181146181a35787841161818b5787945050505050615e74565b8361819581619f3f565b945050828451169050618171565b6181ad8785618c0f565b945050505050615e74565b8383206181c58588618dcc565b6181cf9087618c0f565b91505b85821061820a578482208082036181f7576181ed8684618c0f565b9350505050615e74565b618202600184618dcc565b9250506181d2565b505b5092949350505050565b6000838186851161832157602085116182d0576000851561826257600161823e876020618dcc565b618249906008619e35565b618254906002619f33565b61825e9190618dcc565b1990505b845181166000876182738b8b618c0f565b61827d9190618dcc565b855190915083165b8281146182c2578186106182aa5761829d8b8b618c0f565b9650505050505050615e74565b856182b481619e1b565b965050838651169050618285565b859650505050505050615e74565b508383206000905b6182e28689618dcc565b821161831f578583208082036182fe5783945050505050615e74565b618309600185618c0f565b935050818061831790619e1b565b9250506182d8565b505b61832b8787618c0f565b979650505050505050565b604080518082019091526000808252602082015260006183688560000151866020015186600001518760200151618216565b6020808701805191860191909152519091506183849082618dcc565b8352845160208601516183979190618c0f565b81036183a657600085526183d8565b835183516183b49190618c0f565b855186906183c3908390618dcc565b90525083516183d29082618c0f565b60208601525b50909392505050565b6020811061841957815183526183f8602084618c0f565b9250618405602083618c0f565b9150618412602082618dcc565b90506183e1565b600019811561844857600161842f836020618dcc565b61843b90610100619f33565b6184459190618dcc565b90505b9151835183169219169190911790915250565b606060006184698484614947565b805160208083015160405193945061848393909101619f56565b60405160208183030381529060405291505092915050565b81518151600091908111156184ae575081515b6020808501519084015160005b838110156185675782518251808214618537576000196020871015618516576001846184e8896020618dcc565b6184f29190618c0f565b6184fd906008619e35565b618508906002619f33565b6185129190618dcc565b1990505b81811683821681810391146185345797506144fd9650505050505050565b50505b618542602086618c0f565b945061854f602085618c0f565b935050506020816185609190618c0f565b90506184bb565b5084518651614ff59190619fae565b610c9f80619fcf83390190565b6112a68061ac6e83390190565b6040518060e001604052806060815260200160608152602001606081526020016000151581526020016000151581526020016000151581526020016185d36185d8565b905290565b604051806101000160405280600015158152602001600015158152602001606081526020016000801916815260200160608152602001606081526020016000151581526020016185d36040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561868a5783516001600160a01b0316835260209384019390920191600101618663565b509095945050505050565b60005b838110156186b0578181015183820152602001618698565b50506000910152565b600081518084526186d1816020860160208601618695565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156187e1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b818110156187c7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a85030183526187b18486516186b9565b6020958601959094509290920191600101618777565b50919750505060209485019492909201915060010161870d565b50929695505050505050565b600081518084526020840193506020830160005b828110156188415781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101618801565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156187e1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281518051604087526188b760408801826186b9565b90506020820151915086810360208801526188d281836187ed565b965050506020938401939190910190600101618873565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156187e1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261894b8583516186b9565b94506020938401939190910190600101618911565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156187e1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b03815116865260208101519050604060208701526189e160408701826187ed565b9550506020938401939190910190600101618988565b600181811c90821680618a0b57607f821691505b602082108103616740577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a0606085015260008154618a8e816189f7565b8060a08801526001821660008114618aad5760018114618ae757618b1b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b8901019350618b1b565b84600052602060002060005b83811015618b125781548a820160c00152600190910190602001618af3565b890160c0019450505b50505060038401546080860152809250505092915050565b6001600160a01b03861681528460208201526001600160a01b038416604082015260a060608201526000618b6a60a08301856186b9565b8281036080840152618b7c8185618a44565b98975050505050505050565b6001600160a01b0383168152604060208201526000615e746040830184618a44565b8381526001600160a01b0383166020820152608060408201526000608082015260a06060820152600061672660a0830184618a44565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156144fd576144fd618be0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f82111561083d57806000526020600020601f840160051c81016020851015618c785750805b601f840160051c820191505b81811015611a985760008155600101618c84565b815167ffffffffffffffff811115618cb257618cb2618c22565b618cc681618cc084546189f7565b84618c51565b6020601f821160018114618cfa5760008315618ce25750848201515b600019600385901b1c1916600184901b178455611a98565b600084815260208120601f198516915b82811015618d2a5787850151825560209485019460019092019101618d0a565b5084821015618d485786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215618d6957600080fd5b5051919050565b600060208284031215618d8257600080fd5b8151801515811461457757600080fd5b8481526001600160a01b0384166020820152608060408201526000618dba60808301856186b9565b828103606084015261832b8185618a44565b818103818111156144fd576144fd618be0565b600082618e15577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b0384168152606060208201526000618e3c60608301856186b9565b8281036040840152614ff58185618a44565b6001600160a01b03851681528360208201526001600160a01b0383166040820152608060608201526000614ff56080830184618a44565b604081526000618e9860408301856186b9565b82810360208401526145738185618a44565b6001600160a01b0383168152604060208201526000615e7460408301846186b9565b7f4661696c656420746f206465706c6f7920636f6e747261637420000000000000815260008351618f0481601a850160208801618695565b7f3a20000000000000000000000000000000000000000000000000000000000000601a918401918201528351618f4181601c840160208801618695565b01601c01949350505050565b60208152600061457760208301846186b9565b600060208284031215618f7257600080fd5b81516001600160a01b038116811461457757600080fd5b6040516060810167ffffffffffffffff81118282101715618fac57618fac618c22565b60405290565b60008067ffffffffffffffff841115618fcd57618fcd618c22565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715618ffc57618ffc618c22565b60405283815290508082840185101561901457600080fd5b616243846020830185618695565b600082601f83011261903357600080fd5b61457783835160208501618fb2565b60006020828403121561905457600080fd5b815167ffffffffffffffff81111561906b57600080fd5b6144f984828501619022565b60008351619089818460208801618695565b83519083019061909d818360208801618695565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e7472616374200000000000008152600083516190de81601a850160208801618695565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161911b816033840160208801618695565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061457760808301846186b9565b6000602082840312156191aa57600080fd5b815167ffffffffffffffff8111156191c157600080fd5b8201601f810184136191d257600080fd5b6144f984825160208401618fb2565b600085516191f3818460208a01618695565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161922d816001840160208a01618695565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161926b816002840160208901618695565b6001818301019150507f2f00000000000000000000000000000000000000000000000000000000000000600182015283516192ad816002840160208801618695565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b6040815260006192f860408301846186b9565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161936f81601f850160208701618695565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b6040815260006193dc60408301846186b9565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061942e60408301846186b9565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b270000000000000000000000008152600082516194a5816014850160208701618695565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b6040815260006194ec60408301856186b9565b828103602084015261457381856186b9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251619565816001850160208701618695565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b600082516195ab818460208701618695565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161965e81604b850160208701618695565b91909101604b0192915050565b600060ff821660ff810361968157619681618be0565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c694000000000000000000000000000000000000000000000006020820152600082516196e8816029850160208701618695565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061457760808301846186b9565b60006020828403121561974e57600080fd5b815167ffffffffffffffff81111561976557600080fd5b82016060818503121561977757600080fd5b61977f618f89565b81518060030b811461979057600080fd5b8152602082015167ffffffffffffffff8111156197ac57600080fd5b6197b886828501619022565b602083015250604082015167ffffffffffffffff8111156197d857600080fd5b6197e486828501619022565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f2200000000000000000000000000000000000000000000000000000000000000602082015260008251619850816021850160208701618695565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f2700000000000000000000000000000000000000000000000000000000000000602082015260008351619a3c816021850160208801618695565b7f2720696e206f75747075743a20000000000000000000000000000000000000006021918401918201528351619a7981602e840160208801618695565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a2000000000000000000000000000000000000000000000006020820152600082516196e8816029850160208701618695565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a000000000000000000000000000000000000000000000000000000000000602082015260008251619b41816022850160208701618695565b9190910160220192915050565b7f436f6e7472616374206e616d6520000000000000000000000000000000000000815260008251619b8681600e850160208701618695565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351619c64816018850160208801618695565b7f20696e20000000000000000000000000000000000000000000000000000000006018918401918201528351619ca181601c840160208801618695565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619da7818460208701618695565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f72654000000000815260008251619e0e81601c850160208701618695565b91909101601c0192915050565b60006000198203619e2e57619e2e618be0565b5060010190565b80820281158282048414176144fd576144fd618be0565b6001815b6001841115619e8757808504811115619e6b57619e6b618be0565b6001841615619e7957908102905b60019390931c928002619e50565b935093915050565b600082619e9e575060016144fd565b81619eab575060006144fd565b8160018114619ec15760028114619ecb57619ee7565b60019150506144fd565b60ff841115619edc57619edc618be0565b50506001821b6144fd565b5060208310610133831016604e8410600b8410161715619f0a575081810a6144fd565b619f176000198484619e4c565b8060001904821115619f2b57619f2b618be0565b029392505050565b60006145778383619e8f565b600081619f4e57619f4e618be0565b506000190190565b60008351619f68818460208801618695565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619fa2816001840160208801618695565b01600101949350505050565b818103600083128015838313168383128216171561783b5761783b618be056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122001ec0ce060384773f3d3389fab7bed652c6b8ee389a7471cce10d00d87a75a0c64736f6c634300081a0033a264697066735822122066b246bd00880858348a3a4195c3ae33afa29b7361eaa4a2e40354a5db28896c64736f6c634300081a0033", } // GatewayEVMInboundTestABI is the input ABI used to generate the binding from. @@ -2182,12 +2182,14 @@ func (it *GatewayEVMInboundTestReceivedOnCallIterator) Close() error { // GatewayEVMInboundTestReceivedOnCall represents a ReceivedOnCall event raised by the GatewayEVMInboundTest contract. type GatewayEVMInboundTestReceivedOnCall struct { - Raw types.Log // Blockchain specific contextual infos + Sender common.Address + Message []byte + Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedOnCall is a free log retrieval operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// FilterReceivedOnCall is a free log retrieval operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) FilterReceivedOnCall(opts *bind.FilterOpts) (*GatewayEVMInboundTestReceivedOnCallIterator, error) { logs, sub, err := _GatewayEVMInboundTest.contract.FilterLogs(opts, "ReceivedOnCall") @@ -2197,9 +2199,9 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) FilterReceivedOnCal return &GatewayEVMInboundTestReceivedOnCallIterator{contract: _GatewayEVMInboundTest.contract, event: "ReceivedOnCall", logs: logs, sub: sub}, nil } -// WatchReceivedOnCall is a free log subscription operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// WatchReceivedOnCall is a free log subscription operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) WatchReceivedOnCall(opts *bind.WatchOpts, sink chan<- *GatewayEVMInboundTestReceivedOnCall) (event.Subscription, error) { logs, sub, err := _GatewayEVMInboundTest.contract.WatchLogs(opts, "ReceivedOnCall") @@ -2234,9 +2236,9 @@ func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) WatchReceivedOnCall }), nil } -// ParseReceivedOnCall is a log parse operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// ParseReceivedOnCall is a log parse operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_GatewayEVMInboundTest *GatewayEVMInboundTestFilterer) ParseReceivedOnCall(log types.Log) (*GatewayEVMInboundTestReceivedOnCall, error) { event := new(GatewayEVMInboundTestReceivedOnCall) if err := _GatewayEVMInboundTest.contract.UnpackLog(event, "ReceivedOnCall", log); err != nil { diff --git a/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go b/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go index 8282ea91..6d7db44a 100644 --- a/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go +++ b/v2/pkg/gatewayevm.t.sol/gatewayevmtest.go @@ -66,8 +66,8 @@ type StdInvariantFuzzSelector struct { // GatewayEVMTestMetaData contains all meta data concerning the GatewayEVMTest contract. var GatewayEVMTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfDestinationIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20FailsIfNotCustodyOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteWithMsgContextFailsIfDestinationIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayableFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayableWithMsgContextFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveOnCallFails\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveOnCallUsingAuthCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveOnRevertFails\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testRevertWithERC20FailsIfNotCustodyOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfSenderIsNotAdmin\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfSet\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfSenderIsNotAdmin\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfSet\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgrade\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfSenderIsNotTSSUpdater\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpgradeAndForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedV2\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedOnCall\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedCustodyTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ef8a8061003c6000396000f3fe608060405234801561001057600080fd5b50600436106102f45760003560e01c806385f438c111610191578063ce5871e1116100e3578063e63ab1e911610097578063fa18c09b11610071578063fa18c09b14610527578063fa7626d41461052f578063fe7bdbb21461053c57600080fd5b8063e63ab1e9146104f0578063e6afc79014610517578063f68bd1c01461051f57600080fd5b8063d38b66cd116100c8578063d38b66cd146104d8578063dd51e82f146104e0578063e20c9f71146104e857600080fd5b8063ce5871e1146104c8578063cebad2a6146104d057600080fd5b8063a783c78911610145578063b5508aa91161011f578063b5508aa9146104a0578063ba414fa6146104a8578063ccf20616146104c057600080fd5b8063a783c78914610469578063b0464fdc14610490578063b124dbf51461049857600080fd5b8063a217fddf11610176578063a217fddf14610451578063a397ffd214610459578063a56f7a4b1461046157600080fd5b806385f438c114610415578063916a17c61461043c57600080fd5b806344671b941161024a57806366d9a9a0116101fe5780637d7f772a116101d85780637d7f772a146103f05780637ebf744f146103f857806385226c811461040057600080fd5b806366d9a9a0146103cb5780636bdd212b146103e05780637a380ebf146103e857600080fd5b806351010e491161022f57806351010e491461038657806352ff59391461038e5780635d62c8601461039657600080fd5b806344671b94146103765780634df42da11461037e57600080fd5b80631855c337116102ac5780633e5e3c23116102865780633e5e3c231461035e5780633f7286f41461036657806343fd8c7d1461036e57600080fd5b80631855c337146103235780631ed7831c1461032b5780632ade38801461034957600080fd5b80630a9254e4116102dd5780630a9254e41461030b5780631226c65514610313578063130daf591461031b57600080fd5b806304b974f9146102f9578063070f2ad014610303575b600080fd5b610301610544565b005b610301610740565b610301610931565b610301611360565b6103016114d5565b61030161168c565b610333611806565b604051610340919061a6bc565b60405180910390f35b610351611868565b604051610340919061a758565b6103336119aa565b610333611a0a565b610301611a6a565b610301611db6565b610301612079565b6103016121ee565b6103016123ce565b6103bd7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b604051908152602001610340565b6103d3612936565b604051610340919061a8be565b610301612aa3565b610301612c62565b610301613282565b610301613572565b6104086136ec565b604051610340919061a9b8565b6103bd7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6104446137bc565b604051610340919061a9cb565b6103bd600081565b6103016138a2565b610301613bb5565b6103bd7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b610444613cf2565b610301613dd8565b61040861405c565b6104b061412c565b6040519015158152602001610340565b610301614200565b61030161433d565b6103016144b2565b6103016146c6565b61030161480c565b610333614fc7565b6103bd7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b610301615027565b610301615272565b61030161562a565b601f546104b09060ff1681565b61030161596f565b6040805160048082526024820183526020820180516001600160e01b03167f6ed7016900000000000000000000000000000000000000000000000000000000179052602754925163ca669fa760e01b81529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263ca669fa7926105d6926001600160a01b031691016001600160a01b0391909116815260200190565b600060405180830381600087803b1580156105f057600080fd5b505af1158015610604573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561068d57600080fd5b505af11580156106a1573d6000803e3d6000fd5b5050601f546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b03169250631cff79cd91506106f590600090859060040161aa62565b6000604051808303816000875af1158015610714573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261073c919081019061ab6c565b5050565b6027546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156107b257600080fd5b505af11580156107c6573d6000803e3d6000fd5b5050602754604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061087d919060040161aba1565b600060405180830381600087803b15801561089757600080fd5b505af11580156108ab573d6000803e3d6000fd5b5050601f546025546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063950837aa91506024015b600060405180830381600087803b15801561091757600080fd5b505af115801561092b573d6000803e3d6000fd5b50505050565b602580547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556026805482166112341790556027805482166156781790556028805490911661987617905560405161098f9061a5dc565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610a14573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040519116908190610a5d9061a5e9565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610a90573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260275460255492519086169481019490945260448401929092529092166064820152600091610b6f916084015b60408051601f198184030181529190526020810180516001600160e01b03167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052615dae565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0384811682029290921792839055604080518082018252601081527f4552433230437573746f64792e736f6c0000000000000000000000000000000060208201526027546025549251939095048416602484015293831660448301529091166064820152919250610c1291608401610b27565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691909117909155604080518082018252601a81527f5a657461436f6e6e6563746f724e6f6e4e61746976652e736f6c0000000000006020820152601f546024805460275460255495516101009094048716928401929092528516604483015284166064820152919092166084820152919250610d049160a40160408051601f198184030181529190526020810180516001600160e01b03167ff8c8765e00000000000000000000000000000000000000000000000000000000179052615dae565b602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038381169190911790915560275460405163ca669fa760e01b815291166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610d8f57600080fd5b505af1158015610da3573d6000803e3d6000fd5b5050602480546027546022546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b158015610e1657600080fd5b505af1158015610e2a573d6000803e3d6000fd5b50505050604051610e3a9061a5f6565b604051809103906000f080158015610e56573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610f0257600080fd5b505af1158015610f16573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610f8c57600080fd5b505af1158015610fa0573d6000803e3d6000fd5b5050601f546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f9150602401600060405180830381600087803b15801561100b57600080fd5b505af115801561101f573d6000803e3d6000fd5b5050601f546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef9150602401600060405180830381600087803b15801561108a57600080fd5b505af115801561109e573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561110057600080fd5b505af1158015611114573d6000803e3d6000fd5b50506023546025546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561118357600080fd5b505af1158015611197573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af115801561120b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122f919061abb4565b506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156112b057600080fd5b505af11580156112c4573d6000803e3d6000fd5b5050604080516080810182526025546001600160a01b039081168252602354811660208084019182526001848601908152855191820190955260008152606084018190528351602d80549185167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161781559251602e8054919095169116179092559251602f5590935090915060309061092b908261ac6a565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156113d257600080fd5b505af11580156113e6573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561146f57600080fd5b505af1158015611483573d6000803e3d6000fd5b5050601f546040517fae7a3a6f000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063ae7a3a6f91506024016108fd565b6040805160048082526024820183526020820180516001600160e01b03167fc9028a3600000000000000000000000000000000000000000000000000000000179052602754925163ca669fa760e01b81529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263ca669fa792611567926001600160a01b031691016001600160a01b0391909116815260200190565b600060405180830381600087803b15801561158157600080fd5b505af1158015611595573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ff3459a96000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561161f57600080fd5b505af1158015611633573d6000803e3d6000fd5b5050601f546020546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b039081169450631cff79cd93506106f592911690859060040161aa62565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156116fe57600080fd5b505af1158015611712573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb337f378000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561179c57600080fd5b505af11580156117b0573d6000803e3d6000fd5b5050601f546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f91506024016108fd565b6060601680548060200260200160405190810160405280929190818152602001828054801561185e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611840575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156119a157600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561198a5783829060005260206000200180546118fd9061abd6565b80601f01602080910402602001604051908101604052809291908181526020018280546119299061abd6565b80156119765780601f1061194b57610100808354040283529160200191611976565b820191906000526020600020905b81548152906001019060200180831161195957829003601f168201915b5050505050815260200190600101906118de565b50505050815250508152602001906001019061188c565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801561185e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611840575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561185e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611840575050505050905090565b604080516001808252818301909252600091816020015b6060815260200190600190039081611a815790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e64727921000000000000000000000000000000000081525081600081518110611ae157611ae161ad29565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110611b2557611b2561ad29565b6020908102919091010152604051600190600090611b4b9085908590859060240161ad8a565b60408051601f198184030181529181526020820180516001600160e01b03167ff05b6abf00000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611be957600080fd5b505af1158015611bfd573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611cd3919060040161aba1565b600060405180830381600087803b158015611ced57600080fd5b505af1158015611d01573d6000803e3d6000fd5b5050601f54604080516020808201835261012382525491517f38e225270000000000000000000000000000000000000000000000000000000081526101009093046001600160a01b0390811695506338e225279450611d689391921690869060040161adc2565b6000604051808303816000875af1158015611d87573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611daf919081019061ab6c565b5050505050565b604080516004808252602482018352602080830180516001600160e01b03167f6ed70169000000000000000000000000000000000000000000000000000000001790525492517ff30c7ba30000000000000000000000000000000000000000000000000000000081529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611e56926001600160a01b03169160009187910161adf4565b600060405180830381600087803b158015611e7057600080fd5b505af1158015611e84573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611efd57600080fd5b505af1158015611f11573d6000803e3d6000fd5b5050601f546040516101009091046001600160a01b031681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09250602001905060405180910390a1601f546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611fd357600080fd5b505af1158015611fe7573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f915061202d90600090859061ae1c565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401611605565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156120eb57600080fd5b505af11580156120ff573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561218857600080fd5b505af115801561219c573d6000803e3d6000fd5b5050601f546040517f950837aa000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063950837aa91506024016108fd565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561228e57600080fd5b505af11580156122a2573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561232b57600080fd5b505af115801561233f573d6000803e3d6000fd5b5050601f546040517fcb7ba8e50000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316925063cb7ba8e591508490612398906000908690602d9060040161af12565b6000604051808303818588803b1580156123b157600080fd5b505af11580156123c5573d6000803e3d6000fd5b50505050505050565b601f546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb600482015261432160248201819052916000916101009091046001600160a01b0316906391d1485490604401602060405180830381865afa158015612461573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612485919061abb4565b905061249081615dcd565b601f546027546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b0391821660248201526000926101009004909116906391d1485490604401602060405180830381865afa158015612524573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612548919061abb4565b905061255381615e47565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156125c557600080fd5b505af11580156125d9573d6000803e3d6000fd5b5050601f546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561265657600080fd5b505af115801561266a573d6000803e3d6000fd5b5050602754604080516001600160a01b03928316815291871660208301527f3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579935001905060405180910390a1601f546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301526101009092049091169063950837aa90602401600060405180830381600087803b15801561271c57600080fd5b505af1158015612730573d6000803e3d6000fd5b505050506127b483601f60019054906101000a90046001600160a01b03166001600160a01b0316635b1125916040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127af919061af46565b615e99565b601f546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b038581166024830152610100909204909116906391d1485490604401602060405180830381865afa158015612843573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612867919061abb4565b915061287282615e47565b601f546027546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b03918216602482015261010090920416906391d1485490604401602060405180830381865afa158015612902573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612926919061abb4565b905061293181615dcd565b505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156119a1578382906000526020600020906002020160405180604001604052908160008201805461298d9061abd6565b80601f01602080910402602001604051908101604052809291908181526020018280546129b99061abd6565b8015612a065780601f106129db57610100808354040283529160200191612a06565b820191906000526020600020905b8154815290600101906020018083116129e957829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015612a8b57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411612a4d5790505b5050505050815250508152602001906001019061295a565b6040805160048082526024820183526020820180516001600160e01b03167f6ed7016900000000000000000000000000000000000000000000000000000000179052602754925163ca669fa760e01b81529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263ca669fa792612b35926001600160a01b031691016001600160a01b0391909116815260200190565b600060405180830381600087803b158015612b4f57600080fd5b505af1158015612b63573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612bec57600080fd5b505af1158015612c00573d6000803e3d6000fd5b5050601f5460408051602081018252610123815290517f38e225270000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b031693506338e2252792506106f591600090869060040161adc2565b601f54604080518082018252601981527f4761746577617945564d55706772616465546573742e736f6c00000000000000602080830191909152825190810190925260008252602554612cc7936001600160a01b036101009091048116939116615f22565b601f54604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516101009092046001600160a01b031691600091839163dda79b75916004808201926020929091908290030181865afa158015612d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d57919061af46565b90506000601f60019054906101000a90046001600160a01b03166001600160a01b0316635b1125916040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd2919061af46565b604080518082018252600f81527f48656c6c6f2c20466f756e6472792100000000000000000000000000000000006020820152905191925090602a90600190670de0b6b3a764000090600090612e309086908690869060240161af6f565b60408051601f19818403018152918152602080830180516001600160e01b03167fe04d4f97000000000000000000000000000000000000000000000000000000001790525490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612ed6916001600160a01b0391909116908690869060040161adf4565b600060405180830381600087803b158015612ef057600080fd5b505af1158015612f04573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612f7d57600080fd5b505af1158015612f91573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b031683878787604051612fe195949392919061af99565b60405180910390a1601f546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561306257600080fd5b505af1158015613076573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854691506130bb908590859061ae1c565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561311c57600080fd5b505af1158015613130573d6000803e3d6000fd5b50506020546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b03808d169450631cff79cd9350869261318292911690869060040161aa62565b60006040518083038185885af11580156131a0573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526131c9919081019061ab6c565b5061322187601f60019054906101000a90046001600160a01b03166001600160a01b031663dda79b756040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278b573d6000803e3d6000fd5b61327886601f60019054906101000a90046001600160a01b03166001600160a01b0316635b1125916040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278b573d6000803e3d6000fd5b5050505050505050565b604080516001808252818301909252600091816020015b60608152602001906001900390816132995790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e647279210000000000000000000000000000000000815250816000815181106132f9576132f961ad29565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a8160008151811061333d5761333d61ad29565b60209081029190910101526040516001906000906133639085908590859060240161ad8a565b60408051601f198184030181529181526020820180516001600160e01b03167ff05b6abf00000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561340157600080fd5b505af1158015613415573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506134eb919060040161aba1565b600060405180830381600087803b15801561350557600080fd5b505af1158015613519573d6000803e3d6000fd5b5050601f546020546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b039081169450631cff79cd9350611d6892911690859060040161aa62565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156135e457600080fd5b505af11580156135f8573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f0c8dc016000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561368257600080fd5b505af1158015613696573d6000803e3d6000fd5b5050601f546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef91506024016108fd565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156119a157838290600052602060002001805461372f9061abd6565b80601f016020809104026020016040519081016040528092919081815260200182805461375b9061abd6565b80156137a85780601f1061377d576101008083540402835291602001916137a8565b820191906000526020600020905b81548152906001019060200180831161378b57829003601f168201915b505050505081526020019060010190613710565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156119a15760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561388a57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b0319168152602001906004019060208260030104928301926001038202915080841161384c5790505b505050505081525050815260200190600101906137e0565b6020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561391757600080fd5b505af115801561392b573d6000803e3d6000fd5b50506040517f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee925060009150a1601f546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156139d157600080fd5b505af11580156139e5573d6000803e3d6000fd5b505060208054604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000093810193909352516001600160a01b0390911693507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9250613a5d9160009161ae1c565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613abe57600080fd5b505af1158015613ad2573d6000803e3d6000fd5b5050601f5460408051602080820183526101238252805483518085018552600181527f31000000000000000000000000000000000000000000000000000000000000009281019290925292517f38e225270000000000000000000000000000000000000000000000000000000081526101009094046001600160a01b0390811696506338e225279550613b6b949293169160040161adc2565b6000604051808303816000875af1158015613b8a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613bb2919081019061ab6c565b50565b6027546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015613c2757600080fd5b505af1158015613c3b573d6000803e3d6000fd5b5050602754604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611782919060040161aba1565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156119a15760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015613dc057602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411613d825790505b50505050508152505081526020019060010190613d16565b602354602654604051620186a0602482018190526001600160a01b03938416604483015292909116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613ea957600080fd5b505af1158015613ebd573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613f93919060040161aba1565b600060405180830381600087803b158015613fad57600080fd5b505af1158015613fc1573d6000803e3d6000fd5b5050601f546023546026546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526101009093046001600160a01b03908116955063aa0c0fc19450614026939281169291169087908790602d9060040161afda565b600060405180830381600087803b15801561404057600080fd5b505af1158015614054573d6000803e3d6000fd5b505050505050565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156119a157838290600052602060002001805461409f9061abd6565b80601f01602080910402602001604051908101604052809291908181526020018280546140cb9061abd6565b80156141185780601f106140ed57610100808354040283529160200191614118565b820191906000526020600020905b8154815290600101906020018083116140fb57829003601f168201915b505050505081526020019060010190614080565b60085460009060ff1615614144575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156141d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141f9919061b02f565b1415905090565b6027546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561427257600080fd5b505af1158015614286573d6000803e3d6000fd5b5050602754604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613668919060040161aba1565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156143af57600080fd5b505af11580156143c3573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561444c57600080fd5b505af1158015614460573d6000803e3d6000fd5b5050601f546040517f10188aef000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b031692506310188aef91506024016108fd565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561455257600080fd5b505af1158015614566573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061463c919060040161aba1565b600060405180830381600087803b15801561465657600080fd5b505af115801561466a573d6000803e3d6000fd5b5050601f546020546040517fcb7ba8e50000000000000000000000000000000000000000000000000000000081526001600160a01b036101009093048316945063cb7ba8e5935086926123989216908690602d9060040161af12565b60408051602081018252600080825291516146e691607b9160240161aa62565b60408051601f198184030181529181526020820180516001600160e01b03167f676cc05400000000000000000000000000000000000000000000000000000000179052602754905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561478457600080fd5b505af1158015614798573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fed699775000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401611605565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561486557600080fd5b505af1158015614879573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061494f919060040161aba1565b600060405180830381600087803b15801561496957600080fd5b505af115801561497d573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156149d157600080fd5b505af11580156149e5573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614a4257600080fd5b505af1158015614a56573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614b2c919060040161aba1565b600060405180830381600087803b158015614b4657600080fd5b505af1158015614b5a573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614bae57600080fd5b505af1158015614bc2573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614c1f57600080fd5b505af1158015614c33573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614c8757600080fd5b505af1158015614c9b573d6000803e3d6000fd5b5050604080516004808252602480830184526020830180516001600160e01b03167f6ed701690000000000000000000000000000000000000000000000000000000017905292517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c06650000000000000000000000000000000000000000000000000000000091810191909152909350737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09101600060405180830381600087803b158015614d6857600080fd5b505af1158015614d7c573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614dd957600080fd5b505af1158015614ded573d6000803e3d6000fd5b5050601f546020546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b039081169450631cff79cd9350614e4692911690859060040161aa62565b6000604051808303816000875af1158015614e65573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614e8d919081019061ab6c565b5060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614ee757600080fd5b505af1158015614efb573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614f4f57600080fd5b505af1158015614f63573d6000803e3d6000fd5b50506020546040517ff30c7ba3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f30c7ba39250611e56916001600160a01b031690600090869060040161adf4565b6060601580548060200260200160405190810160405280929190818152602001828054801561185e576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611840575050505050905090565b602354602654604051620186a0602482018190526001600160a01b03938416604483015292909116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156150f857600080fd5b505af115801561510c573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506151e2919060040161aba1565b600060405180830381600087803b1580156151fc57600080fd5b505af1158015615210573d6000803e3d6000fd5b5050601f546023546026546040517f5131ab590000000000000000000000000000000000000000000000000000000081526101009093046001600160a01b039081169550635131ab59945061402693928116929116908790879060040161b048565b604080516001808252818301909252600091816020015b60608152602001906001900390816152895790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e647279210000000000000000000000000000000000815250816000815181106152e9576152e961ad29565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a8160008151811061532d5761532d61ad29565b60209081029190910101526040516001906000906153539085908590859060240161ad8a565b60408051601f19818403018152918152602080830180516001600160e01b03167ff05b6abf000000000000000000000000000000000000000000000000000000001790525490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916153fa916001600160a01b039190911690600090869060040161adf4565b600060405180830381600087803b15801561541457600080fd5b505af1158015615428573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156154a157600080fd5b505af11580156154b5573d6000803e3d6000fd5b505050507f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146601f60019054906101000a90046001600160a01b0316858585604051615503949392919061b07f565b60405180910390a1601f546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561558457600080fd5b505af1158015615598573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506155de90600090859061ae1c565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024016134eb565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051601f198184030181529190526020549091506001600160a01b03163161568e816000615f37565b6020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561570357600080fd5b505af1158015615717573d6000803e3d6000fd5b505050507f689a5a5cb55e795ffe4cd8b419cd3bb0a3373974c54d25f64e734d7388b93e9b601f60019054906101000a90046001600160a01b0316602d60405161576292919061b0c7565b60405180910390a1601f546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156157e357600080fd5b505af11580156157f7573d6000803e3d6000fd5b5050602054604051600093506001600160a01b0390911691507fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e0359061584a90670de0b6b3a7640000908790602d9061b0e9565b60405180910390a360275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156158ab57600080fd5b505af11580156158bf573d6000803e3d6000fd5b5050601f546020546040517fcb7ba8e50000000000000000000000000000000000000000000000000000000081526001600160a01b036101009093048316945063cb7ba8e59350879261591b9216908790602d9060040161af12565b6000604051808303818588803b15801561593457600080fd5b505af1158015615948573d6000803e3d6000fd5b50506020546001600160a01b031631925061092b9150829050670de0b6b3a7640000615f37565b60408051808201909152600f81527f48656c6c6f2c20466f756e64727921000000000000000000000000000000000060208083019190915254602a90600190670de0b6b3a7640000906159ce906000906001600160a01b031631615f37565b60008484846040516024016159e59392919061af6f565b60408051601f19818403018152918152602080830180516001600160e01b03167fe04d4f97000000000000000000000000000000000000000000000000000000001790525490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391615a93916001600160a01b039190911690670de0b6b3a764000090869060040161adf4565b600060405180830381600087803b158015615aad57600080fd5b505af1158015615ac1573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015615b3a57600080fd5b505af1158015615b4e573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b031683878787604051615b9e95949392919061af99565b60405180910390a1601f546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015615c1f57600080fd5b505af1158015615c33573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150615c8090670de0b6b3a764000090859061ae1c565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615ce157600080fd5b505af1158015615cf5573d6000803e3d6000fd5b5050601f546020546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd93508692615d4e921690869060040161aa62565b60006040518083038185885af1158015615d6c573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052615d95919081019061ab6c565b50602054611daf9083906001600160a01b031631615f37565b6000615db861a603565b615dc3848483615f8f565b9150505b92915050565b6040517fa59828850000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063a5982885906024015b60006040518083038186803b158015615e3357600080fd5b505afa158015611daf573d6000803e3d6000fd5b6040517f0c9fd5810000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90630c9fd58190602401615e1b565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f6906044015b60006040518083038186803b158015615f0e57600080fd5b505afa158015614054573d6000803e3d6000fd5b615f2a61a603565b611daf858585848661600a565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c5490604401615ef6565b600080615f9c858461610a565b9050615fff6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001615fea92919061aa62565b60405160208183030381529060405285616116565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b15801561607c57600080fd5b505af192505050801561608d575060015b6160a25761609d87878787616144565b6123c5565b6160ae87878787616144565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156160e957600080fd5b505af11580156160fd573d6000803e3d6000fd5b5050505050505050505050565b6000616003838361615d565b60c0810151516000901561613a5761613384848460c00151616178565b9050616003565b616133848461631e565b60006161508483616409565b9050611daf858285616415565b600061616983836167df565b61600383836020015184616116565b6000806161836167eb565b9050600061619186836168be565b905060006161a88260600151836020015185616d64565b905060006161b883838989616f76565b905060006161c582617df3565b602081015181519192509060030b15616238578982604001516040516020016161ef92919061b102565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261622f9160040161aba1565b60405180910390fd5b600061627b6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001617fc2565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906162ce90849060040161aba1565b602060405180830381865afa1580156162eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061630f919061af46565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061637390879060040161aba1565b600060405180830381865afa158015616390573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526163b8919081019061ab6c565b905060006163e682856040516020016163d292919061b183565b6040516020818303038152906040526181c2565b90506001600160a01b038116615dc35784846040516020016161ef92919061b1b2565b600061616983836181d5565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa1580156164b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906164d5919061b02f565b90508061667c5760006164e7866181e1565b604080518082018252600581527f352e302e3000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150616572905b604080518082018252600080825260209182015281518083019092528451825280850190820152906182c4565b8061657e575060008451115b15616601576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906165ca908890889060040161aa62565b600060405180830381600087803b1580156165e457600080fd5b505af11580156165f8573d6000803e3d6000fd5b50505050616676565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561665d57600080fd5b505af1158015616671573d6000803e3d6000fd5b505050505b50611daf565b806000616688826181e1565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506166ea90616545565b806166f6575060008551115b1561677b576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90616744908a908a908a9060040161b25d565b600060405180830381600087803b15801561675e57600080fd5b505af1158015616772573d6000803e3d6000fd5b505050506123c5565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b1580156160e957600080fd5b61073c828260006182d8565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061687290849060040161b28e565b600060405180830381865afa15801561688f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168b7919081019061b2d5565b9250505090565b6168f06040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d905061693b6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b616944856183db565b60208201526000616954866187c0565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015616996573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526169be919081019061b2d5565b868385602001516040516020016169d8949392919061b31e565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190616a3090859060040161aba1565b600060405180830381865afa158015616a4d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616a75919081019061b2d5565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690616abd90849060040161b422565b602060405180830381865afa158015616ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616afe919061abb4565b616b1357816040516020016161ef919061b474565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616b5890849060040161b506565b600060405180830381865afa158015616b75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616b9d919081019061b2d5565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690616be490849060040161b558565b602060405180830381865afa158015616c01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616c25919061abb4565b15616cba576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616c6f90849060040161b558565b600060405180830381865afa158015616c8c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616cb4919081019061b2d5565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001616cdf919061b5aa565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401616d0b92919061b616565b600060405180830381865afa158015616d28573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616d50919081019061b2d5565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081616d805790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110616de057616de061ad29565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110616e3457616e3461ad29565b602002602001018190525084604051602001616e50919061b63b565b60405160208183030381529060405281600281518110616e7257616e7261ad29565b602002602001018190525082604051602001616e8e919061b6a7565b60405160208183030381529060405281600381518110616eb057616eb061ad29565b60200260200101819052506000616ec682617df3565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250616f579060408051808201825260008082526020918201528151808301909252845182528085019082015290618a43565b616f6c57856040516020016161ef919061b6e8565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616fc6565b511590565b61713a57826020015115617082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a40161622f565b8260c001511561713a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a40161622f565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161715357905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806171ae9061b7a8565b935060ff16815181106171c3576171c361ad29565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001617214919061b7c7565b60405160208183030381529060405282828061722f9061b7a8565b935060ff16815181106172445761724461ad29565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806172919061b7a8565b935060ff16815181106172a6576172a661ad29565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806172f39061b7a8565b935060ff16815181106173085761730861ad29565b602002602001018190525087602001518282806173249061b7a8565b935060ff16815181106173395761733961ad29565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806173869061b7a8565b935060ff168151811061739b5761739b61ad29565b6020908102919091010152875182826173b38161b7a8565b935060ff16815181106173c8576173c861ad29565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806174159061b7a8565b935060ff168151811061742a5761742a61ad29565b602002602001018190525061743e46618aa4565b82826174498161b7a8565b935060ff168151811061745e5761745e61ad29565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806174ab9061b7a8565b935060ff16815181106174c0576174c061ad29565b6020026020010181905250868282806174d89061b7a8565b935060ff16815181106174ed576174ed61ad29565b60209081029190910101528551156176145760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261753e8161b7a8565b935060ff16815181106175535761755361ad29565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906175a390899060040161aba1565b600060405180830381865afa1580156175c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526175e8919081019061b2d5565b82826175f38161b7a8565b935060ff16815181106176085761760861ad29565b60200260200101819052505b8460200151156176e45760408051808201909152601281527f2d2d766572696679536f75726365436f646500000000000000000000000000006020820152828261765d8161b7a8565b935060ff16815181106176725761767261ad29565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806176bf9061b7a8565b935060ff16815181106176d4576176d461ad29565b60200260200101819052506178ab565b61771c616fc18660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6177af5760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261775f8161b7a8565b935060ff16815181106177745761777461ad29565b60200260200101819052508460a00151604051602001617794919061b63b565b6040516020818303038152906040528282806176bf9061b7a8565b8460c001511580156177f25750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526177f090511590565b155b156178ab5760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826178368161b7a8565b935060ff168151811061784b5761784b61ad29565b602002602001018190525061785f88618b44565b60405160200161786f919061b63b565b60405160208183030381529060405282828061788a9061b7a8565b935060ff168151811061789f5761789f61ad29565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526178df90511590565b6179745760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826179228161b7a8565b935060ff16815181106179375761793761ad29565b602002602001018190525084604001518282806179539061b7a8565b935060ff16815181106179685761796861ad29565b60200260200101819052505b606085015115617a955760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826179bd8161b7a8565b935060ff16815181106179d2576179d261ad29565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617a41573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617a69919081019061b2d5565b8282617a748161b7a8565b935060ff1681518110617a8957617a8961ad29565b60200260200101819052505b60e08501515115617b3c5760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282617adf8161b7a8565b935060ff1681518110617af457617af461ad29565b6020026020010181905250617b108560e0015160000151618aa4565b8282617b1b8161b7a8565b935060ff1681518110617b3057617b3061ad29565b60200260200101819052505b60e08501516020015115617be65760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282617b898161b7a8565b935060ff1681518110617b9e57617b9e61ad29565b6020026020010181905250617bba8560e0015160200151618aa4565b8282617bc58161b7a8565b935060ff1681518110617bda57617bda61ad29565b60200260200101819052505b60e08501516040015115617c905760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282617c338161b7a8565b935060ff1681518110617c4857617c4861ad29565b6020026020010181905250617c648560e0015160400151618aa4565b8282617c6f8161b7a8565b935060ff1681518110617c8457617c8461ad29565b60200260200101819052505b60e08501516060015115617d3a5760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282617cdd8161b7a8565b935060ff1681518110617cf257617cf261ad29565b6020026020010181905250617d0e8560e0015160600151618aa4565b8282617d198161b7a8565b935060ff1681518110617d2e57617d2e61ad29565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617d5857617d5861aa84565b604051908082528060200260200182016040528015617d8b57816020015b6060815260200190600190039081617d765790505b50905060005b8260ff168160ff161015617de457838160ff1681518110617db457617db461ad29565b6020026020010151828260ff1681518110617dd157617dd161ad29565b6020908102919091010152600101617d91565b5093505050505b949350505050565b617e1a6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91617ea09186910161b832565b600060405180830381865afa158015617ebd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617ee5919081019061b2d5565b90506000617ef38683619633565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617f23919061a9b8565b6000604051808303816000875af1158015617f42573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617f6a919081019061b879565b805190915060030b15801590617f835750602081015151155b8015617f925750604081015151155b15616f6c5781600081518110617faa57617faa61ad29565b60200260200101516040516020016161ef919061b92f565b60606000617ff78560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252865182528087019082015290915061802e9082905b90619788565b1561818b5760006180ab826180a58461809f6180718a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906197af565b90619811565b604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061810f908290619788565b1561817957604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618176905b8290619896565b90505b618182816198bc565b92505050616003565b82156181a45784846040516020016161ef92919061bb1b565b5050604080516020810190915260008152616003565b509392505050565b6000808251602084016000f09392505050565b61073c828260016182d8565b60408051600481526024810182526020810180516001600160e01b03167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691618241919061bbc2565b600060405180830381855afa9150503d806000811461827c576040519150601f19603f3d011682016040523d82523d6000602084013e618281565b606091505b5091509150818015618294575060208151115b156182ad5780806020019051810190617deb919061b2d5565b505060408051602081019091526000815292915050565b60006182d08383619925565b159392505050565b8160a00151156182e757505050565b60006182f4848484619a00565b9050600061830182617df3565b602081015181519192509060030b15801561839d5750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261839d90604080518082018252600080825260209182015281518083019092528451825280850190820152618028565b156183aa57505050505050565b604082015151156183ca5781604001516040516020016161ef919061bbde565b806040516020016161ef919061bc3c565b606060006184108360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618475905b8290618a43565b156184e457604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616003906184df908390619f9b565b6198bc565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618546905b829061a025565b60010361861357604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526185ac9061816f565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616003906184df905b8390619896565b604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526186729061846e565b156187a957604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906186da90839061a0bf565b9050600081600183516186ed919061bca7565b815181106186fd576186fd61ad29565b602002602001015190506187a06184df6187736040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290619f9b565b95945050505050565b826040516020016161ef919061bcba565b50919050565b606060006187f58360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506188579061846e565b1561886557616003816198bc565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188c49061853f565b60010361892e57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616003906184df9061860c565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261898d9061846e565b156187a957604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906189f590839061a0bf565b9050600181511115618a31578060028251618a10919061bca7565b81518110618a2057618a2061ad29565b602002602001015192505050919050565b50826040516020016161ef919061bcba565b805182516000911115618a5857506000615dc7565b81518351602085015160009291618a6e9161bd98565b618a78919061bca7565b905082602001518103618a8f576001915050615dc7565b82516020840151819020912014905092915050565b60606000618ab18361a164565b600101905060008167ffffffffffffffff811115618ad157618ad161aa84565b6040519080825280601f01601f191660200182016040528015618afb576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084618b0557509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091618bd0905b82906182c4565b15618c1057505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c6f90618bc9565b15618caf57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d0e90618bc9565b15618d4e57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618dad90618bc9565b80618e125750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e1290618bc9565b15618e5257505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618eb190618bc9565b80618f165750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f1690618bc9565b15618f5657505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618fb590618bc9565b8061901a5750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261901a90618bc9565b1561905a57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526190b990618bc9565b8061911e5750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261911e90618bc9565b1561915e57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526191bd90618bc9565b156191fd57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261925c90618bc9565b1561929c57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526192fb90618bc9565b1561933b57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261939a90618bc9565b156193da57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261943990618bc9565b1561947957505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526194d890618bc9565b8061953d5750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261953d90618bc9565b1561957d57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526195dc90618bc9565b1561961c57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516161ef929060200161bdab565b60608060005b84518110156196be57818582815181106196555761965561ad29565b602002602001015160405160200161966e92919061b183565b60405160208183030381529060405291506001855161968d919061bca7565b81146196b657816040516020016196a4919061bf14565b60405160208183030381529060405291505b600101619639565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816196d757905050905083816000815181106197025761970261ad29565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106197565761975661ad29565b602002602001018190525081816002815181106197755761977561ad29565b6020908102919091010152949350505050565b60208083015183518351928401516000936197a6929184919061a246565b14159392505050565b604080518082019091526000808252602082015260006197e1846000015185602001518560000151866020015161a357565b90508360200151816197f3919061bca7565b8451859061980290839061bca7565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015619836575081615dc7565b602080830151908401516001911461985d5750815160208481015190840151829020919020145b801561988e5782518451859061987490839061bca7565b905250825160208501805161988a90839061bd98565b9052505b509192915050565b60408051808201909152600080825260208201526198b583838361a477565b5092915050565b60606000826000015167ffffffffffffffff8111156198dd576198dd61aa84565b6040519080825280601f01601f191660200182016040528015619907576020820181803683370190505b50905060006020820190506198b5818560200151866000015161a522565b8151815160009190811115619938575081515b6020808501519084015160005b838110156199f157825182518082146199c15760001960208710156199a05760018461997289602061bca7565b61997c919061bd98565b61998790600861bf55565b61999290600261c053565b61999c919061bca7565b1990505b81811683821681810391146199be579750615dc79650505050505050565b50505b6199cc60208661bd98565b94506199d960208561bd98565b935050506020816199ea919061bd98565b9050619945565b5084518651616f6c919061c05f565b60606000619a0c6167eb565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081619a2957905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280619a849061b7a8565b935060ff1681518110619a9957619a9961ad29565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619aea919061c07f565b604051602081830303815290604052828280619b059061b7a8565b935060ff1681518110619b1a57619b1a61ad29565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280619b679061b7a8565b935060ff1681518110619b7c57619b7c61ad29565b602002602001018190525082604051602001619b98919061b6a7565b604051602081830303815290604052828280619bb39061b7a8565b935060ff1681518110619bc857619bc861ad29565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280619c159061b7a8565b935060ff1681518110619c2a57619c2a61ad29565b6020026020010181905250619c3f878461a59c565b8282619c4a8161b7a8565b935060ff1681518110619c5f57619c5f61ad29565b602090810291909101015285515115619d0b5760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282619cb18161b7a8565b935060ff1681518110619cc657619cc661ad29565b6020026020010181905250619cdf86600001518461a59c565b8282619cea8161b7a8565b935060ff1681518110619cff57619cff61ad29565b60200260200101819052505b856080015115619d795760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282619d548161b7a8565b935060ff1681518110619d6957619d6961ad29565b6020026020010181905250619ddf565b8415619ddf5760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282619dbe8161b7a8565b935060ff1681518110619dd357619dd361ad29565b60200260200101819052505b60408601515115619e7b5760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282619e298161b7a8565b935060ff1681518110619e3e57619e3e61ad29565b60200260200101819052508560400151828280619e5a9061b7a8565b935060ff1681518110619e6f57619e6f61ad29565b60200260200101819052505b856060015115619ee55760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282619ec48161b7a8565b935060ff1681518110619ed957619ed961ad29565b60200260200101819052505b60008160ff1667ffffffffffffffff811115619f0357619f0361aa84565b604051908082528060200260200182016040528015619f3657816020015b6060815260200190600190039081619f215790505b50905060005b8260ff168160ff161015619f8f57838160ff1681518110619f5f57619f5f61ad29565b6020026020010151828260ff1681518110619f7c57619f7c61ad29565b6020908102919091010152600101619f3c565b50979650505050505050565b6040805180820190915260008082526020820152815183511015619fc0575081615dc7565b81518351602085015160009291619fd69161bd98565b619fe0919061bca7565b6020840151909150600190821461a001575082516020840151819020908220145b801561a01c5783518551869061a01890839061bca7565b9052505b50929392505050565b600080826000015161a049856000015186602001518660000151876020015161a357565b61a053919061bd98565b90505b8351602085015161a067919061bd98565b81116198b5578161a0778161c0c4565b925050826000015161a0ae85602001518361a092919061bca7565b865161a09e919061bca7565b838660000151876020015161a357565b61a0b8919061bd98565b905061a056565b6060600061a0cd848461a025565b61a0d890600161bd98565b67ffffffffffffffff81111561a0f05761a0f061aa84565b60405190808252806020026020018201604052801561a12357816020015b606081526020019060019003908161a10e5790505b50905060005b81518110156181ba5761a13f6184df8686619896565b82828151811061a1515761a15161ad29565b602090810291909101015260010161a129565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061a1ad577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061a1d9576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061a1f757662386f26fc10000830492506010015b6305f5e100831061a20f576305f5e100830492506008015b612710831061a22357612710830492506004015b6064831061a235576064830492506002015b600a8310615dc75760010192915050565b60008085841161a34d576020841161a2f9576000841561a29157600161a26d86602061bca7565b61a27890600861bf55565b61a28390600261c053565b61a28d919061bca7565b1990505b835181168561a2a0898961bd98565b61a2aa919061bca7565b805190935082165b81811461a2e45787841161a2cc5787945050505050617deb565b8361a2d68161c0de565b94505082845116905061a2b2565b61a2ee878561bd98565b945050505050617deb565b83832061a306858861bca7565b61a310908761bd98565b91505b85821061a34b5784822080820361a3385761a32e868461bd98565b9350505050617deb565b61a34360018461bca7565b92505061a313565b505b5092949350505050565b6000838186851161a462576020851161a411576000851561a3a357600161a37f87602061bca7565b61a38a90600861bf55565b61a39590600261c053565b61a39f919061bca7565b1990505b8451811660008761a3b48b8b61bd98565b61a3be919061bca7565b855190915083165b82811461a4035781861061a3eb5761a3de8b8b61bd98565b9650505050505050617deb565b8561a3f58161c0c4565b96505083865116905061a3c6565b859650505050505050617deb565b508383206000905b61a423868961bca7565b821161a4605785832080820361a43f5783945050505050617deb565b61a44a60018561bd98565b935050818061a4589061c0c4565b92505061a419565b505b61a46c878761bd98565b979650505050505050565b6040805180820190915260008082526020820152600061a4a9856000015186602001518660000151876020015161a357565b60208087018051918601919091525190915061a4c5908261bca7565b83528451602086015161a4d8919061bd98565b810361a4e7576000855261a519565b8351835161a4f5919061bd98565b8551869061a50490839061bca7565b905250835161a513908261bd98565b60208601525b50909392505050565b6020811061a55a578151835261a53960208461bd98565b925061a54660208361bd98565b915061a55360208261bca7565b905061a522565b600019811561a58957600161a57083602061bca7565b61a57c9061010061c053565b61a586919061bca7565b90505b9151835183169219169190911790915250565b6060600061a5aa84846168be565b805160208083015160405193945061a5c49390910161c0f5565b60405160208183030381529060405291505092915050565b610c9f8061c14e83390190565b6112a68061cded83390190565b610ec28061e09383390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a64661a64b565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a6466040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a6fd5783516001600160a01b031683526020938401939092019160010161a6d6565b509095945050505050565b60005b8381101561a72357818101518382015260200161a70b565b50506000910152565b6000815180845261a74481602086016020860161a708565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a854577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a83a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a82484865161a72c565b602095860195909450929092019160010161a7ea565b50919750505060209485019492909201915060010161a780565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a8b45781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a874565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a854577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a92a604088018261a72c565b905060208201519150868103602088015261a945818361a860565b96505050602093840193919091019060010161a8e6565b600082825180855260208501945060208160051b8301016020850160005b8381101561a9ac57601f1985840301885261a99683835161a72c565b602098890198909350919091019060010161a97a565b50909695505050505050565b602081526000616003602083018461a95c565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a854577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261aa4c604087018261a860565b955050602093840193919091019060010161a9f3565b6001600160a01b0383168152604060208201526000617deb604083018461a72c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561aad65761aad661aa84565b60405290565b60008067ffffffffffffffff84111561aaf75761aaf761aa84565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561ab265761ab2661aa84565b60405283815290508082840185101561ab3e57600080fd5b6181ba84602083018561a708565b600082601f83011261ab5d57600080fd5b6160038383516020850161aadc565b60006020828403121561ab7e57600080fd5b815167ffffffffffffffff81111561ab9557600080fd5b615dc38482850161ab4c565b602081526000616003602083018461a72c565b60006020828403121561abc657600080fd5b8151801515811461600357600080fd5b600181811c9082168061abea57607f821691505b6020821081036187ba577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f82111561293157806000526020600020601f840160051c8101602085101561ac4a5750805b601f840160051c820191505b81811015611daf576000815560010161ac56565b815167ffffffffffffffff81111561ac845761ac8461aa84565b61ac988161ac92845461abd6565b8461ac23565b6020601f82116001811461accc576000831561acb45750848201515b600019600385901b1c1916600184901b178455611daf565b600084815260208120601f198516915b8281101561acfc578785015182556020948501946001909201910161acdc565b508482101561ad1a5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561a8b457815186526020958601959091019060010161ad6c565b60608152600061ad9d606083018661a95c565b828103602084015261adaf818661ad58565b9150508215156040830152949350505050565b6001600160a01b0384511681526001600160a01b03831660208201526060604082015260006187a0606083018461a72c565b6001600160a01b03841681528260208201526060604082015260006187a0606083018461a72c565b828152604060208201526000617deb604083018461a72c565b6001600160a01b0381541682526001600160a01b03600182015416602083015260028101546040830152600060038201608060608501526000815461ae798161abd6565b806080880152600182166000811461ae98576001811461aed25761af06565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660a089015260a082151560051b890101935061af06565b84600052602060002060005b8381101561aefd5781548a820160a0015260019091019060200161aede565b890160a0019450505b50919695505050505050565b6001600160a01b038416815260606020820152600061af34606083018561a72c565b8281036040840152616f6c818561ae35565b60006020828403121561af5857600080fd5b81516001600160a01b038116811461600357600080fd5b60608152600061af82606083018661a72c565b602083019490945250901515604090910152919050565b6001600160a01b038616815284602082015260a06040820152600061afc160a083018661a72c565b6060830194909452509015156080909101529392505050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260a06060820152600061b01160a083018561a72c565b828103608084015261b023818561ae35565b98975050505050505050565b60006020828403121561b04157600080fd5b5051919050565b6001600160a01b03851681526001600160a01b0384166020820152826040820152608060608201526000616f6c608083018461a72c565b6001600160a01b038516815260806020820152600061b0a1608083018661a95c565b828103604084015261b0b3818661ad58565b915050821515606083015295945050505050565b6001600160a01b0383168152604060208201526000617deb604083018461ae35565b83815260606020820152600061af34606083018561a72c565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161b13a81601a85016020880161a708565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161b17781601c84016020880161a708565b01601c01949350505050565b6000835161b19581846020880161a708565b83519083019061b1a981836020880161a708565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161b1ea81601a85016020880161a708565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161b22781603384016020880161a708565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006187a0606083018461a72c565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000616003608083018461a72c565b60006020828403121561b2e757600080fd5b815167ffffffffffffffff81111561b2fe57600080fd5b8201601f8101841361b30f57600080fd5b615dc38482516020840161aadc565b6000855161b330818460208a0161a708565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161b36a816001840160208a0161a708565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161b3a881600284016020890161a708565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161b3ea81600284016020880161a708565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061b435604083018461a72c565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161b4ac81601f85016020870161a708565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b519604083018461a72c565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b56b604083018461a72c565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b5e281601485016020870161a708565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b629604083018561a72c565b8281036020840152615fff818561a72c565b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b67381600185016020870161a708565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b6b981846020870161a708565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b76c81604b85016020870161a708565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff810361b7be5761b7be61b779565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b82581602985016020870161a708565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000616003608083018461a72c565b60006020828403121561b88b57600080fd5b815167ffffffffffffffff81111561b8a257600080fd5b82016060818503121561b8b457600080fd5b61b8bc61aab3565b81518060030b811461b8cd57600080fd5b8152602082015167ffffffffffffffff81111561b8e957600080fd5b61b8f58682850161ab4c565b602083015250604082015167ffffffffffffffff81111561b91557600080fd5b61b9218682850161ab4c565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b98d81602185016020870161a708565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161bb7981602185016020880161a708565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161bbb681602e84016020880161a708565b01602e01949350505050565b6000825161bbd481846020870161a708565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b82581602985016020870161a708565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161bc9a81602285016020870161a708565b9190910160220192915050565b81810381811115615dc757615dc761b779565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161bcf281600e85016020870161a708565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115615dc757615dc761b779565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161bde381601885016020880161a708565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161be2081601c84016020880161a708565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161bf2681846020870161a708565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417615dc757615dc761b779565b6001815b600184111561bfa75780850481111561bf8b5761bf8b61b779565b600184161561bf9957908102905b60019390931c92800261bf70565b935093915050565b60008261bfbe57506001615dc7565b8161bfcb57506000615dc7565b816001811461bfe1576002811461bfeb5761c007565b6001915050615dc7565b60ff84111561bffc5761bffc61b779565b50506001821b615dc7565b5060208310610133831016604e8410600b841016171561c02a575081810a615dc7565b61c037600019848461bf6c565b806000190482111561c04b5761c04b61b779565b029392505050565b6000616003838361bfaf565b81810360008312801583831316838312821617156198b5576198b561b779565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161c0b781601c85016020870161a708565b91909101601c0192915050565b6000600019820361c0d75761c0d761b779565b5060010190565b60008161c0ed5761c0ed61b779565b506000190190565b6000835161c10781846020880161a708565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161c14181600184016020880161a708565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122001ec0ce060384773f3d3389fab7bed652c6b8ee389a7471cce10d00d87a75a0c64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610e9e806100246000396000f3fe60806040526004361061006e5760003560e01c8063c51316911161004b578063c5131691146100d5578063c9028a36146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a214610077578063676cc054146100975780636ed70169146100c057005b3661007557005b005b34801561008357600080fd5b506100756100923660046106ec565b610148565b6100aa6100a5366004610728565b6101de565b6040516100b79190610823565b60405180910390f35b3480156100cc57600080fd5b50610075610222565b3480156100e157600080fd5b506100756100f03660046106ec565b610257565b34801561010157600080fd5b50610075610110366004610836565b610332565b610075610123366004610996565b61036e565b34801561013457600080fd5b50610075610143366004610a82565b6103b2565b6101506103e7565b61017273ffffffffffffffffffffffffffffffffffffffff831633838661042a565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a1506040805160208101909152600081525b9392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61025f6103e7565b600061026c600285610b6c565b9050806000036102a8576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102ca73ffffffffffffffffffffffffffffffffffffffff841633848461042a565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f689a5a5cb55e795ffe4cd8b419cd3bb0a3373974c54d25f64e734d7388b93e9b3382604051610363929190610bf0565b60405180910390a150565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa33348585856040516103a5959493929190610ce2565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103a59493929190610d6c565b600260005403610423576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104bf9085906104c5565b50505050565b60006104e773ffffffffffffffffffffffffffffffffffffffff841683610560565b9050805160001415801561050c57508080602001905181019061050a9190610e2f565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061021b83836000846000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105939190610e4c565b60006040518083038185875af1925050503d80600081146105d0576040519150601f19603f3d011682016040523d82523d6000602084013e6105d5565b606091505b50915091506105e58683836105ef565b9695505050505050565b606082610604576105ff8261067e565b61021b565b8151158015610628575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610677576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610557565b508061021b565b80511561068e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106e757600080fd5b919050565b60008060006060848603121561070157600080fd5b83359250610711602085016106c3565b915061071f604085016106c3565b90509250925092565b6000806000838503604081121561073e57600080fd5b602081121561074c57600080fd5b50839250602084013567ffffffffffffffff81111561076a57600080fd5b8401601f8101861361077b57600080fd5b803567ffffffffffffffff81111561079257600080fd5b8660208284010111156107a457600080fd5b939660209190910195509293505050565b60005b838110156107d05781810151838201526020016107b8565b50506000910152565b600081518084526107f18160208601602086016107b5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061021b60208301846107d9565b60006020828403121561084857600080fd5b813567ffffffffffffffff81111561085f57600080fd5b82016080818503121561021b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156108e7576108e7610871565b604052919050565b600082601f83011261090057600080fd5b813567ffffffffffffffff81111561091a5761091a610871565b61094b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108a0565b81815284602083860101111561096057600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106c057600080fd5b80356106e78161097d565b6000806000606084860312156109ab57600080fd5b833567ffffffffffffffff8111156109c257600080fd5b6109ce868287016108ef565b9350506020840135915060408401356109e68161097d565b809150509250925092565b600067ffffffffffffffff821115610a0b57610a0b610871565b5060051b60200190565b600082601f830112610a2657600080fd5b8135610a39610a34826109f1565b6108a0565b8082825260208201915060208360051b860101925085831115610a5b57600080fd5b602085015b83811015610a78578035835260209283019201610a60565b5095945050505050565b600080600060608486031215610a9757600080fd5b833567ffffffffffffffff811115610aae57600080fd5b8401601f81018613610abf57600080fd5b8035610acd610a34826109f1565b8082825260208201915060208360051b850101925088831115610aef57600080fd5b602084015b83811015610b3157803567ffffffffffffffff811115610b1357600080fd5b610b228b6020838901016108ef565b84525060209283019201610af4565b509550505050602084013567ffffffffffffffff811115610b5157600080fd5b610b5d86828701610a15565b92505061071f6040850161098b565b600082610ba2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2e836106c3565b16604082015273ffffffffffffffffffffffffffffffffffffffff610c55602084016106c3565b166060820152600080604084013590508060808401525060608301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610ca157600080fd5b830160208101903567ffffffffffffffff811115610cbe57600080fd5b803603821315610ccd57600080fd5b608060a08501526105e560c085018284610ba7565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d1760a08301866107d9565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610d62578151865260209586019590910190600101610d44565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610dff577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610dea8583516107d9565b94506020938401939190910190600101610db0565b505050508281036040840152610e158186610d30565b915050610e26606083018415159052565b95945050505050565b600060208284031215610e4157600080fd5b815161021b8161097d565b60008251610e5e8184602087016107b5565b919091019291505056fea26469706673582212200121b4788f0b35a4b6df21db4f43708a9b20e8b16f616e6f3300230e75bbdd1364736f6c634300081a0033a26469706673582212203918e3d53d9f0df07c037d9b6fb6125d64982e2c4fb9c51af1ab999e2328e24e64736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testExecuteFailsIfDestinationIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertFailsIfReceiverIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteRevertFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteWithERC20FailsIfNotCustodyOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testExecuteWithMsgContextFailsIfDestinationIsZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNoParamsTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayableFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveNonPayableWithMsgContextFailsIfSenderIsNotTSS\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveOnCallFails\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveOnCallUsingAuthCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceiveOnRevertFails\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testRevertWithERC20FailsIfNotCustodyOrConnector\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfSenderIsNotAdmin\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfSet\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetConnectorFailsIfZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfSenderIsNotAdmin\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfSet\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testSetCustodyFailsIfZero\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgrade\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfSenderIsNotTSSUpdater\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpgradeAndForwardCallToReceivePayable\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedV2\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedOnCall\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedCustodyTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x600c8054600160ff199182168117909255601f8054909116909117905560a06040526000608052603180546001600160a01b0319169055348015604157600080fd5b5061f03c806100516000396000f3fe608060405234801561001057600080fd5b50600436106102f45760003560e01c806385f438c111610191578063ce5871e1116100e3578063e63ab1e911610097578063fa18c09b11610071578063fa18c09b14610527578063fa7626d41461052f578063fe7bdbb21461053c57600080fd5b8063e63ab1e9146104f0578063e6afc79014610517578063f68bd1c01461051f57600080fd5b8063d38b66cd116100c8578063d38b66cd146104d8578063dd51e82f146104e0578063e20c9f71146104e857600080fd5b8063ce5871e1146104c8578063cebad2a6146104d057600080fd5b8063a783c78911610145578063b5508aa91161011f578063b5508aa9146104a0578063ba414fa6146104a8578063ccf20616146104c057600080fd5b8063a783c78914610469578063b0464fdc14610490578063b124dbf51461049857600080fd5b8063a217fddf11610176578063a217fddf14610451578063a397ffd214610459578063a56f7a4b1461046157600080fd5b806385f438c114610415578063916a17c61461043c57600080fd5b806344671b941161024a57806366d9a9a0116101fe5780637d7f772a116101d85780637d7f772a146103f05780637ebf744f146103f857806385226c811461040057600080fd5b806366d9a9a0146103cb5780636bdd212b146103e05780637a380ebf146103e857600080fd5b806351010e491161022f57806351010e491461038657806352ff59391461038e5780635d62c8601461039657600080fd5b806344671b94146103765780634df42da11461037e57600080fd5b80631855c337116102ac5780633e5e3c23116102865780633e5e3c231461035e5780633f7286f41461036657806343fd8c7d1461036e57600080fd5b80631855c337146103235780631ed7831c1461032b5780632ade38801461034957600080fd5b80630a9254e4116102dd5780630a9254e41461030b5780631226c65514610313578063130daf591461031b57600080fd5b806304b974f9146102f9578063070f2ad014610303575b600080fd5b610301610544565b005b610301610743565b610301610934565b610301611363565b6103016114d8565b610301611690565b61033361180a565b604051610340919061a6c4565b60405180910390f35b61035161186c565b604051610340919061a760565b6103336119ae565b610333611a0e565b610301611a6e565b610301611dba565b61030161207d565b6103016121f2565b6103016123d2565b6103bd7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b604051908152602001610340565b6103d361293a565b604051610340919061a8c6565b610301612aa7565b610301612c66565b61030161328a565b61030161357b565b6104086136f5565b604051610340919061a9c0565b6103bd7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6104446137c5565b604051610340919061a9d3565b6103bd600081565b6103016138ab565b610301613bb8565b6103bd7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b610444613cf5565b610301613ddb565b61040861405f565b6104b061412f565b6040519015158152602001610340565b610301614203565b610301614340565b6103016144b5565b6103016146c9565b61030161480f565b610333614fcb565b6103bd7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61030161502b565b610301615276565b61030161562e565b601f546104b09060ff1681565b610301615973565b6040805160048082526024820183526020820180516001600160e01b03167f6ed7016900000000000000000000000000000000000000000000000000000000179052602754925163ca669fa760e01b81529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263ca669fa7926105d6926001600160a01b031691016001600160a01b0391909116815260200190565b600060405180830381600087803b1580156105f057600080fd5b505af1158015610604573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561068d57600080fd5b505af11580156106a1573d6000803e3d6000fd5b5050601f546040517f38e225270000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b031692506338e2252791506106f890603190600090869060040161aa6a565b6000604051808303816000875af1158015610717573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261073f919081019061ab84565b5050565b6027546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156107b557600080fd5b505af11580156107c9573d6000803e3d6000fd5b5050602754604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250610880919060040161abb9565b600060405180830381600087803b15801561089a57600080fd5b505af11580156108ae573d6000803e3d6000fd5b5050601f546025546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063950837aa91506024015b600060405180830381600087803b15801561091a57600080fd5b505af115801561092e573d6000803e3d6000fd5b50505050565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680548216611234179055602780548216615678179055602880549091166198761790556040516109929061a5e4565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f080158015610a17573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040519116908190610a609061a5f1565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610a93573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283169081178255604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260275460255492519086169481019490945260448401929092529092166064820152600091610b72916084015b60408051601f198184030181529190526020810180516001600160e01b03167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052615db6565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0384811682029290921792839055604080518082018252601081527f4552433230437573746f64792e736f6c0000000000000000000000000000000060208201526027546025549251939095048416602484015293831660448301529091166064820152919250610c1591608401610b2a565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691909117909155604080518082018252601a81527f5a657461436f6e6e6563746f724e6f6e4e61746976652e736f6c0000000000006020820152601f546024805460275460255495516101009094048716928401929092528516604483015284166064820152919092166084820152919250610d079160a40160408051601f198184030181529190526020810180516001600160e01b03167ff8c8765e00000000000000000000000000000000000000000000000000000000179052615db6565b602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038381169190911790915560275460405163ca669fa760e01b815291166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610d9257600080fd5b505af1158015610da6573d6000803e3d6000fd5b5050602480546027546022546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152908216938101939093521692506315d57fd49150604401600060405180830381600087803b158015610e1957600080fd5b505af1158015610e2d573d6000803e3d6000fd5b50505050604051610e3d9061a5fe565b604051809103906000f080158015610e59573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610f0557600080fd5b505af1158015610f19573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b5050601f546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f9150602401600060405180830381600087803b15801561100e57600080fd5b505af1158015611022573d6000803e3d6000fd5b5050601f546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef9150602401600060405180830381600087803b15801561108d57600080fd5b505af11580156110a1573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561110357600080fd5b505af1158015611117573d6000803e3d6000fd5b50506023546025546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561118657600080fd5b505af115801561119a573d6000803e3d6000fd5b50506023546021546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af115801561120e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611232919061abcc565b506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156112b357600080fd5b505af11580156112c7573d6000803e3d6000fd5b5050604080516080810182526025546001600160a01b039081168252602354811660208084019182526001848601908152855191820190955260008152606084018190528351602d80549185167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161781559251602e8054919095169116179092559251602f5590935090915060309061092e908261ac82565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156113d557600080fd5b505af11580156113e9573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561147257600080fd5b505af1158015611486573d6000803e3d6000fd5b5050601f546040517fae7a3a6f000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063ae7a3a6f9150602401610900565b6040805160048082526024820183526020820180516001600160e01b03167fc9028a3600000000000000000000000000000000000000000000000000000000179052602754925163ca669fa760e01b81529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263ca669fa79261156a926001600160a01b031691016001600160a01b0391909116815260200190565b600060405180830381600087803b15801561158457600080fd5b505af1158015611598573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527ff3459a96000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561162257600080fd5b505af1158015611636573d6000803e3d6000fd5b5050601f546020546040517f38e225270000000000000000000000000000000000000000000000000000000081526001600160a01b03610100909304831694506338e2252793506106f8926031921690869060040161aa6a565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561170257600080fd5b505af1158015611716573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fb337f378000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b1580156117a057600080fd5b505af11580156117b4573d6000803e3d6000fd5b5050601f546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f9150602401610900565b6060601680548060200260200160405190810160405280929190818152602001828054801561186257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611844575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156119a557600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561198e5783829060005260206000200180546119019061abee565b80601f016020809104026020016040519081016040528092919081815260200182805461192d9061abee565b801561197a5780601f1061194f5761010080835404028352916020019161197a565b820191906000526020600020905b81548152906001019060200180831161195d57829003601f168201915b5050505050815260200190600101906118e2565b505050508152505081526020019060010190611890565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015611862576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611844575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611862576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611844575050505050905090565b604080516001808252818301909252600091816020015b6060815260200190600190039081611a855790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e64727921000000000000000000000000000000000081525081600081518110611ae557611ae561ad41565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a81600081518110611b2957611b2961ad41565b6020908102919091010152604051600190600090611b4f9085908590859060240161ada2565b60408051601f198184030181529181526020820180516001600160e01b03167ff05b6abf00000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611bed57600080fd5b505af1158015611c01573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611cd7919060040161abb9565b600060405180830381600087803b158015611cf157600080fd5b505af1158015611d05573d6000803e3d6000fd5b5050601f54604080516020808201835261012382525491517f38e225270000000000000000000000000000000000000000000000000000000081526101009093046001600160a01b0390811695506338e225279450611d6c9391921690869060040161adda565b6000604051808303816000875af1158015611d8b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611db3919081019061ab84565b5050505050565b604080516004808252602482018352602080830180516001600160e01b03167f6ed70169000000000000000000000000000000000000000000000000000000001790525492517ff30c7ba30000000000000000000000000000000000000000000000000000000081529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611e5a926001600160a01b03169160009187910161ae0c565b600060405180830381600087803b158015611e7457600080fd5b505af1158015611e88573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611f0157600080fd5b505af1158015611f15573d6000803e3d6000fd5b5050601f546040516101009091046001600160a01b031681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09250602001905060405180910390a1601f546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611fd757600080fd5b505af1158015611feb573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f915061203190600090859061ae34565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401611608565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156120ef57600080fd5b505af1158015612103573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561218c57600080fd5b505af11580156121a0573d6000803e3d6000fd5b5050601f546040517f950837aa000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b0316925063950837aa9150602401610900565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260275463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561229257600080fd5b505af11580156122a6573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561232f57600080fd5b505af1158015612343573d6000803e3d6000fd5b5050601f546040517fcb7ba8e50000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316925063cb7ba8e59150849061239c906000908690602d9060040161af2a565b6000604051808303818588803b1580156123b557600080fd5b505af11580156123c9573d6000803e3d6000fd5b50505050505050565b601f546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb600482015261432160248201819052916000916101009091046001600160a01b0316906391d1485490604401602060405180830381865afa158015612465573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612489919061abcc565b905061249481615dd5565b601f546027546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b0391821660248201526000926101009004909116906391d1485490604401602060405180830381865afa158015612528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254c919061abcc565b905061255781615e4f565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156125c957600080fd5b505af11580156125dd573d6000803e3d6000fd5b5050601f546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561265a57600080fd5b505af115801561266e573d6000803e3d6000fd5b5050602754604080516001600160a01b03928316815291871660208301527f3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579935001905060405180910390a1601f546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301526101009092049091169063950837aa90602401600060405180830381600087803b15801561272057600080fd5b505af1158015612734573d6000803e3d6000fd5b505050506127b883601f60019054906101000a90046001600160a01b03166001600160a01b0316635b1125916040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b3919061af5e565b615ea1565b601f546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b038581166024830152610100909204909116906391d1485490604401602060405180830381865afa158015612847573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286b919061abcc565b915061287682615e4f565b601f546027546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b03918216602482015261010090920416906391d1485490604401602060405180830381865afa158015612906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292a919061abcc565b905061293581615dd5565b505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156119a557838290600052602060002090600202016040518060400160405290816000820180546129919061abee565b80601f01602080910402602001604051908101604052809291908181526020018280546129bd9061abee565b8015612a0a5780601f106129df57610100808354040283529160200191612a0a565b820191906000526020600020905b8154815290600101906020018083116129ed57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015612a8f57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411612a515790505b5050505050815250508152602001906001019061295e565b6040805160048082526024820183526020820180516001600160e01b03167f6ed7016900000000000000000000000000000000000000000000000000000000179052602754925163ca669fa760e01b81529192737109709ecfa91a80626ff3989d68f67f5b1dd12d9263ca669fa792612b39926001600160a01b031691016001600160a01b0391909116815260200190565b600060405180830381600087803b158015612b5357600080fd5b505af1158015612b67573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612bf057600080fd5b505af1158015612c04573d6000803e3d6000fd5b5050601f5460408051602081018252610123815290517f38e225270000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b031693506338e2252792506106f891600090869060040161adda565b601f54604080518082018252601981527f4761746577617945564d55706772616465546573742e736f6c00000000000000602080830191909152825190810190925260008252602554612ccb936001600160a01b036101009091048116939116615f2a565b601f54604080517fdda79b7500000000000000000000000000000000000000000000000000000000815290516101009092046001600160a01b031691600091839163dda79b75916004808201926020929091908290030181865afa158015612d37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d5b919061af5e565b90506000601f60019054906101000a90046001600160a01b03166001600160a01b0316635b1125916040518163ffffffff1660e01b8152600401602060405180830381865afa158015612db2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd6919061af5e565b604080518082018252600f81527f48656c6c6f2c20466f756e6472792100000000000000000000000000000000006020820152905191925090602a90600190670de0b6b3a764000090600090612e349086908690869060240161af87565b60408051601f19818403018152918152602080830180516001600160e01b03167fe04d4f97000000000000000000000000000000000000000000000000000000001790525490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612eda916001600160a01b0391909116908690869060040161ae0c565b600060405180830381600087803b158015612ef457600080fd5b505af1158015612f08573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612f8157600080fd5b505af1158015612f95573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b031683878787604051612fe595949392919061afb1565b60405180910390a1601f546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561306657600080fd5b505af115801561307a573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e854691506130bf908590859061ae34565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561312057600080fd5b505af1158015613134573d6000803e3d6000fd5b50506020546040517f38e225270000000000000000000000000000000000000000000000000000000081526001600160a01b038c811694506338e225279350869261318a9260319290911690879060040161aa6a565b60006040518083038185885af11580156131a8573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526131d1919081019061ab84565b5061322987601f60019054906101000a90046001600160a01b03166001600160a01b031663dda79b756040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278f573d6000803e3d6000fd5b61328086601f60019054906101000a90046001600160a01b03166001600160a01b0316635b1125916040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278f573d6000803e3d6000fd5b5050505050505050565b604080516001808252818301909252600091816020015b60608152602001906001900390816132a15790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e647279210000000000000000000000000000000000815250816000815181106133015761330161ad41565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a816000815181106133455761334561ad41565b602090810291909101015260405160019060009061336b9085908590859060240161ada2565b60408051601f198184030181529181526020820180516001600160e01b03167ff05b6abf00000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561340957600080fd5b505af115801561341d573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506134f3919060040161abb9565b600060405180830381600087803b15801561350d57600080fd5b505af1158015613521573d6000803e3d6000fd5b5050601f546020546040517f38e225270000000000000000000000000000000000000000000000000000000081526001600160a01b03610100909304831694506338e225279350611d6c926031921690869060040161aa6a565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156135ed57600080fd5b505af1158015613601573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f0c8dc016000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e091506024015b600060405180830381600087803b15801561368b57600080fd5b505af115801561369f573d6000803e3d6000fd5b5050601f546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef9150602401610900565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156119a55783829060005260206000200180546137389061abee565b80601f01602080910402602001604051908101604052809291908181526020018280546137649061abee565b80156137b15780601f10613786576101008083540402835291602001916137b1565b820191906000526020600020905b81548152906001019060200180831161379457829003601f168201915b505050505081526020019060010190613719565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156119a55760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561389357602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116138555790505b505050505081525050815260200190600101906137e9565b6020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561392057600080fd5b505af1158015613934573d6000803e3d6000fd5b5050604080518082018252600181527f31000000000000000000000000000000000000000000000000000000000000006020820152905161012393507fd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501925061399e91849161aff2565b60405180910390a1601f546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015613a1f57600080fd5b505af1158015613a33573d6000803e3d6000fd5b505060208054604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000093810193909352516001600160a01b0390911693507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9250613aab9160009161ae34565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613b0c57600080fd5b505af1158015613b20573d6000803e3d6000fd5b5050601f5460408051602080820183526001600160a01b038781168352815484518086018652600181527f31000000000000000000000000000000000000000000000000000000000000009381019390935293517f38e22527000000000000000000000000000000000000000000000000000000008152610100909504811696506338e2252795506106f8949293169160040161adda565b6027546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015613c2a57600080fd5b505af1158015613c3e573d6000803e3d6000fd5b5050602754604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250611786919060040161abb9565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156119a55760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015613dc357602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411613d855790505b50505050508152505081526020019060010190613d19565b602354602654604051620186a0602482018190526001600160a01b03938416604483015292909116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613eac57600080fd5b505af1158015613ec0573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613f96919060040161abb9565b600060405180830381600087803b158015613fb057600080fd5b505af1158015613fc4573d6000803e3d6000fd5b5050601f546023546026546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526101009093046001600160a01b03908116955063aa0c0fc19450614029939281169291169087908790602d9060040161b014565b600060405180830381600087803b15801561404357600080fd5b505af1158015614057573d6000803e3d6000fd5b505050505050565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156119a55783829060005260206000200180546140a29061abee565b80601f01602080910402602001604051908101604052809291908181526020018280546140ce9061abee565b801561411b5780601f106140f05761010080835404028352916020019161411b565b820191906000526020600020905b8154815290600101906020018083116140fe57829003601f168201915b505050505081526020019060010190614083565b60085460009060ff1615614147575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156141d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141fc919061b069565b1415905090565b6027546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561427557600080fd5b505af1158015614289573d6000803e3d6000fd5b5050602754604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613671919060040161abb9565b6025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b1580156143b257600080fd5b505af11580156143c6573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561444f57600080fd5b505af1158015614463573d6000803e3d6000fd5b5050601f546040517f10188aef000000000000000000000000000000000000000000000000000000008152600060048201526101009091046001600160a01b031692506310188aef9150602401610900565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051808303601f190181529082905260255463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561455557600080fd5b505af1158015614569573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061463f919060040161abb9565b600060405180830381600087803b15801561465957600080fd5b505af115801561466d573d6000803e3d6000fd5b5050601f546020546040517fcb7ba8e50000000000000000000000000000000000000000000000000000000081526001600160a01b036101009093048316945063cb7ba8e59350869261239c9216908690602d9060040161af2a565b60408051602081018252600080825291516146e991607b9160240161aff2565b60408051601f198184030181529181526020820180516001600160e01b03167f676cc05400000000000000000000000000000000000000000000000000000000179052602754905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561478757600080fd5b505af115801561479b573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fed699775000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401611608565b60285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561486857600080fd5b505af115801561487c573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614952919060040161abb9565b600060405180830381600087803b15801561496c57600080fd5b505af1158015614980573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156149d457600080fd5b505af11580156149e8573d6000803e3d6000fd5b505060285460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614a4557600080fd5b505af1158015614a59573d6000803e3d6000fd5b5050602854604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614b2f919060040161abb9565b600060405180830381600087803b158015614b4957600080fd5b505af1158015614b5d573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614bb157600080fd5b505af1158015614bc5573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614c2257600080fd5b505af1158015614c36573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614c8a57600080fd5b505af1158015614c9e573d6000803e3d6000fd5b5050604080516004808252602480830184526020830180516001600160e01b03167f6ed701690000000000000000000000000000000000000000000000000000000017905292517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c06650000000000000000000000000000000000000000000000000000000091810191909152909350737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09101600060405180830381600087803b158015614d6b57600080fd5b505af1158015614d7f573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015614ddc57600080fd5b505af1158015614df0573d6000803e3d6000fd5b5050601f546020546040517f38e225270000000000000000000000000000000000000000000000000000000081526001600160a01b03610100909304831694506338e225279350614e4a926031921690869060040161aa6a565b6000604051808303816000875af1158015614e69573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614e91919081019061ab84565b5060255460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614eeb57600080fd5b505af1158015614eff573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015614f5357600080fd5b505af1158015614f67573d6000803e3d6000fd5b50506020546040517ff30c7ba3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f30c7ba39250611e5a916001600160a01b031690600090869060040161ae0c565b60606015805480602002602001604051908101604052809291908181526020018280548015611862576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611844575050505050905090565b602354602654604051620186a0602482018190526001600160a01b03938416604483015292909116606482015260009060840160408051601f198184030181529181526020820180516001600160e01b03167f357fc5a200000000000000000000000000000000000000000000000000000000179052602554905163ca669fa760e01b81526001600160a01b039091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156150fc57600080fd5b505af1158015615110573d6000803e3d6000fd5b5050602554604080516001600160a01b0390921660248301527f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b960448084019190915281518084039091018152606490920181526020820180516001600160e01b03167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506151e6919060040161abb9565b600060405180830381600087803b15801561520057600080fd5b505af1158015615214573d6000803e3d6000fd5b5050601f546023546026546040517f7bbe9afa0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090940484169550637bbe9afa94506140299360319381169216908890889060040161b082565b604080516001808252818301909252600091816020015b606081526020019060019003908161528d5790505090506040518060400160405280600f81526020017f48656c6c6f2c20466f756e647279210000000000000000000000000000000000815250816000815181106152ed576152ed61ad41565b6020908102919091010152604080516001808252818301909252600091816020016020820280368337019050509050602a816000815181106153315761533161ad41565b60209081029190910101526040516001906000906153579085908590859060240161ada2565b60408051601f19818403018152918152602080830180516001600160e01b03167ff05b6abf000000000000000000000000000000000000000000000000000000001790525490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916153fe916001600160a01b039190911690600090869060040161ae0c565b600060405180830381600087803b15801561541857600080fd5b505af115801561542c573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156154a557600080fd5b505af11580156154b9573d6000803e3d6000fd5b505050507f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146601f60019054906101000a90046001600160a01b0316858585604051615507949392919061b0c9565b60405180910390a1601f546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561558857600080fd5b505af115801561559c573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506155e290600090859061ae34565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa7906024016134f3565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152670de0b6b3a76400009060009060250160408051601f198184030181529190526020549091506001600160a01b031631615692816000615f3f565b6020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561570757600080fd5b505af115801561571b573d6000803e3d6000fd5b505050507f689a5a5cb55e795ffe4cd8b419cd3bb0a3373974c54d25f64e734d7388b93e9b601f60019054906101000a90046001600160a01b0316602d60405161576692919061b111565b60405180910390a1601f546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156157e757600080fd5b505af11580156157fb573d6000803e3d6000fd5b5050602054604051600093506001600160a01b0390911691507fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e0359061584e90670de0b6b3a7640000908790602d9061b133565b60405180910390a360275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156158af57600080fd5b505af11580156158c3573d6000803e3d6000fd5b5050601f546020546040517fcb7ba8e50000000000000000000000000000000000000000000000000000000081526001600160a01b036101009093048316945063cb7ba8e59350879261591f9216908790602d9060040161af2a565b6000604051808303818588803b15801561593857600080fd5b505af115801561594c573d6000803e3d6000fd5b50506020546001600160a01b031631925061092e9150829050670de0b6b3a7640000615f3f565b60408051808201909152600f81527f48656c6c6f2c20466f756e64727921000000000000000000000000000000000060208083019190915254602a90600190670de0b6b3a7640000906159d2906000906001600160a01b031631615f3f565b60008484846040516024016159e99392919061af87565b60408051601f19818403018152918152602080830180516001600160e01b03167fe04d4f97000000000000000000000000000000000000000000000000000000001790525490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391615a97916001600160a01b039190911690670de0b6b3a764000090869060040161ae0c565b600060405180830381600087803b158015615ab157600080fd5b505af1158015615ac5573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015615b3e57600080fd5b505af1158015615b52573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b031683878787604051615ba295949392919061afb1565b60405180910390a1601f546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015615c2357600080fd5b505af1158015615c37573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150615c8490670de0b6b3a764000090859061ae34565b60405180910390a260275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015615ce557600080fd5b505af1158015615cf9573d6000803e3d6000fd5b5050601f546020546040517f38e225270000000000000000000000000000000000000000000000000000000081526001600160a01b03610100909304831694506338e2252793508692615d5692603192911690879060040161aa6a565b60006040518083038185885af1158015615d74573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052615d9d919081019061ab84565b50602054611db39083906001600160a01b031631615f3f565b6000615dc061a60b565b615dcb848483615f97565b9150505b92915050565b6040517fa59828850000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063a5982885906024015b60006040518083038186803b158015615e3b57600080fd5b505afa158015611db3573d6000803e3d6000fd5b6040517f0c9fd5810000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90630c9fd58190602401615e23565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f6906044015b60006040518083038186803b158015615f1657600080fd5b505afa158015614057573d6000803e3d6000fd5b615f3261a60b565b611db38585858486616012565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c5490604401615efe565b600080615fa48584616112565b90506160076040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001615ff292919061aff2565b6040516020818303038152906040528561611e565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b15801561608457600080fd5b505af1925050508015616095575060015b6160aa576160a58787878761614c565b6123c9565b6160b68787878761614c565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156160f157600080fd5b505af1158015616105573d6000803e3d6000fd5b5050505050505050505050565b600061600b8383616165565b60c081015151600090156161425761613b84848460c00151616180565b905061600b565b61613b8484616326565b60006161588483616411565b9050611db385828561641d565b600061617183836167e7565b61600b8383602001518461611e565b60008061618b6167f3565b9050600061619986836168c6565b905060006161b08260600151836020015185616d6c565b905060006161c083838989616f7e565b905060006161cd82617dfb565b602081015181519192509060030b15616240578982604001516040516020016161f792919061b14c565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526162379160040161abb9565b60405180910390fd5b60006162836040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001617fca565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d906162d690849060040161abb9565b602060405180830381865afa1580156162f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616317919061af5e565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061637b90879060040161abb9565b600060405180830381865afa158015616398573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526163c0919081019061ab84565b905060006163ee82856040516020016163da92919061b1cd565b6040516020818303038152906040526181ca565b90506001600160a01b038116615dcb5784846040516020016161f792919061b1fc565b600061617183836181dd565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa1580156164b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906164dd919061b069565b9050806166845760006164ef866181e9565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061657a905b604080518082018252600080825260209182015281518083019092528451825280850190820152906182cc565b80616586575060008451115b15616609576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef286906165d2908890889060040161aff2565b600060405180830381600087803b1580156165ec57600080fd5b505af1158015616600573d6000803e3d6000fd5b5050505061667e565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561666557600080fd5b505af1158015616679573d6000803e3d6000fd5b505050505b50611db3565b806000616690826181e9565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506166f29061654d565b806166fe575060008551115b15616783576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d9061674c908a908a908a9060040161b2a7565b600060405180830381600087803b15801561676657600080fd5b505af115801561677a573d6000803e3d6000fd5b505050506123c9565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b1580156160f157600080fd5b61073f828260006182e0565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061687a90849060040161b2d8565b600060405180830381865afa158015616897573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168bf919081019061b31f565b9250505090565b6168f86040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506169436040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61694c856183e3565b6020820152600061695c866187c8565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561699e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526169c6919081019061b31f565b868385602001516040516020016169e0949392919061b368565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190616a3890859060040161abb9565b600060405180830381865afa158015616a55573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616a7d919081019061b31f565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690616ac590849060040161b46c565b602060405180830381865afa158015616ae2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616b06919061abcc565b616b1b57816040516020016161f7919061b4be565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616b6090849060040161b550565b600060405180830381865afa158015616b7d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616ba5919081019061b31f565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690616bec90849060040161b5a2565b602060405180830381865afa158015616c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616c2d919061abcc565b15616cc2576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890616c7790849060040161b5a2565b600060405180830381865afa158015616c94573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616cbc919081019061b31f565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001616ce7919061b5f4565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401616d1392919061b660565b600060405180830381865afa158015616d30573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616d58919081019061b31f565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b6060815260200190600190039081616d885790505090506040518060400160405280600481526020017f677265700000000000000000000000000000000000000000000000000000000081525081600081518110616de857616de861ad41565b60200260200101819052506040518060400160405280600381526020017f2d726c000000000000000000000000000000000000000000000000000000000081525081600181518110616e3c57616e3c61ad41565b602002602001018190525084604051602001616e58919061b685565b60405160208183030381529060405281600281518110616e7a57616e7a61ad41565b602002602001018190525082604051602001616e96919061b6f1565b60405160208183030381529060405281600381518110616eb857616eb861ad41565b60200260200101819052506000616ece82617dfb565b602080820151604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000008185019081528251808401845260008082529086015282518084019093529051825292810192909252919250616f5f9060408051808201825260008082526020918201528151808301909252845182528085019082015290618a4b565b616f7457856040516020016161f7919061b732565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616fce565b511590565b6171425782602001511561708a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401616237565b8260c0015115617142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401616237565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161715b57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806171b69061b7f2565b935060ff16815181106171cb576171cb61ad41565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161721c919061b811565b6040516020818303038152906040528282806172379061b7f2565b935060ff168151811061724c5761724c61ad41565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806172999061b7f2565b935060ff16815181106172ae576172ae61ad41565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806172fb9061b7f2565b935060ff16815181106173105761731061ad41565b6020026020010181905250876020015182828061732c9061b7f2565b935060ff16815181106173415761734161ad41565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061738e9061b7f2565b935060ff16815181106173a3576173a361ad41565b6020908102919091010152875182826173bb8161b7f2565b935060ff16815181106173d0576173d061ad41565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061741d9061b7f2565b935060ff16815181106174325761743261ad41565b602002602001018190525061744646618aac565b82826174518161b7f2565b935060ff16815181106174665761746661ad41565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806174b39061b7f2565b935060ff16815181106174c8576174c861ad41565b6020026020010181905250868282806174e09061b7f2565b935060ff16815181106174f5576174f561ad41565b602090810291909101015285511561761c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826175468161b7f2565b935060ff168151811061755b5761755b61ad41565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906175ab90899060040161abb9565b600060405180830381865afa1580156175c8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526175f0919081019061b31f565b82826175fb8161b7f2565b935060ff16815181106176105761761061ad41565b60200260200101819052505b8460200151156176ec5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826176658161b7f2565b935060ff168151811061767a5761767a61ad41565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806176c79061b7f2565b935060ff16815181106176dc576176dc61ad41565b60200260200101819052506178b3565b617724616fc98660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6177b75760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826177678161b7f2565b935060ff168151811061777c5761777c61ad41565b60200260200101819052508460a0015160405160200161779c919061b685565b6040516020818303038152906040528282806176c79061b7f2565b8460c001511580156177fa5750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526177f890511590565b155b156178b35760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261783e8161b7f2565b935060ff16815181106178535761785361ad41565b602002602001018190525061786788618b4c565b604051602001617877919061b685565b6040516020818303038152906040528282806178929061b7f2565b935060ff16815181106178a7576178a761ad41565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526178e790511590565b61797c5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261792a8161b7f2565b935060ff168151811061793f5761793f61ad41565b6020026020010181905250846040015182828061795b9061b7f2565b935060ff16815181106179705761797061ad41565b60200260200101819052505b606085015115617a9d5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826179c58161b7f2565b935060ff16815181106179da576179da61ad41565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617a49573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617a71919081019061b31f565b8282617a7c8161b7f2565b935060ff1681518110617a9157617a9161ad41565b60200260200101819052505b60e08501515115617b445760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282617ae78161b7f2565b935060ff1681518110617afc57617afc61ad41565b6020026020010181905250617b188560e0015160000151618aac565b8282617b238161b7f2565b935060ff1681518110617b3857617b3861ad41565b60200260200101819052505b60e08501516020015115617bee5760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282617b918161b7f2565b935060ff1681518110617ba657617ba661ad41565b6020026020010181905250617bc28560e0015160200151618aac565b8282617bcd8161b7f2565b935060ff1681518110617be257617be261ad41565b60200260200101819052505b60e08501516040015115617c985760408051808201909152600e81527f2d2d6d617846656550657247617300000000000000000000000000000000000060208201528282617c3b8161b7f2565b935060ff1681518110617c5057617c5061ad41565b6020026020010181905250617c6c8560e0015160400151618aac565b8282617c778161b7f2565b935060ff1681518110617c8c57617c8c61ad41565b60200260200101819052505b60e08501516060015115617d425760408051808201909152601681527f2d2d6d61785072696f726974794665655065724761730000000000000000000060208201528282617ce58161b7f2565b935060ff1681518110617cfa57617cfa61ad41565b6020026020010181905250617d168560e0015160600151618aac565b8282617d218161b7f2565b935060ff1681518110617d3657617d3661ad41565b60200260200101819052505b60008160ff1667ffffffffffffffff811115617d6057617d6061aa9c565b604051908082528060200260200182016040528015617d9357816020015b6060815260200190600190039081617d7e5790505b50905060005b8260ff168160ff161015617dec57838160ff1681518110617dbc57617dbc61ad41565b6020026020010151828260ff1681518110617dd957617dd961ad41565b6020908102919091010152600101617d99565b5093505050505b949350505050565b617e226040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c91617ea89186910161b87c565b600060405180830381865afa158015617ec5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617eed919081019061b31f565b90506000617efb868361963b565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617f2b919061a9c0565b6000604051808303816000875af1158015617f4a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617f72919081019061b8c3565b805190915060030b15801590617f8b5750602081015151155b8015617f9a5750604081015151155b15616f745781600081518110617fb257617fb261ad41565b60200260200101516040516020016161f7919061b979565b60606000617fff8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506180369082905b90619790565b156181935760006180b3826180ad846180a76180798a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906197b7565b90619819565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150618117908290619790565b1561818157604080518082018252600181527f0a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261817e905b829061989e565b90505b61818a816198c4565b9250505061600b565b82156181ac5784846040516020016161f792919061bb65565b505060408051602081019091526000815261600b565b509392505050565b6000808251602084016000f09392505050565b61073f828260016182e0565b60408051600481526024810182526020810180516001600160e01b03167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691618249919061bc0c565b600060405180830381855afa9150503d8060008114618284576040519150601f19603f3d011682016040523d82523d6000602084013e618289565b606091505b509150915081801561829c575060208151115b156182b55780806020019051810190617df3919061b31f565b505060408051602081019091526000815292915050565b60006182d8838361992d565b159392505050565b8160a00151156182ef57505050565b60006182fc848484619a08565b9050600061830982617dfb565b602081015181519192509060030b1580156183a55750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526183a590604080518082018252600080825260209182015281518083019092528451825280850190820152618030565b156183b257505050505050565b604082015151156183d25781604001516040516020016161f7919061bc28565b806040516020016161f7919061bc86565b606060006184188360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061847d905b8290618a4b565b156184ec57604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261600b906184e7908390619fa3565b6198c4565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261854e905b829061a02d565b60010361861b57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526185b490618177565b50604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261600b906184e7905b839061989e565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261867a90618476565b156187b157604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906186e290839061a0c7565b9050600081600183516186f5919061bcf1565b815181106187055761870561ad41565b602002602001015190506187a86184e761877b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290619fa3565b95945050505050565b826040516020016161f7919061bd04565b50919050565b606060006187fd8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061885f90618476565b1561886d5761600b816198c4565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188cc90618547565b60010361893657604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261600b906184e790618614565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261899590618476565b156187b157604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906189fd90839061a0c7565b9050600181511115618a39578060028251618a18919061bcf1565b81518110618a2857618a2861ad41565b602002602001015192505050919050565b50826040516020016161f7919061bd04565b805182516000911115618a6057506000615dcf565b81518351602085015160009291618a769161bde2565b618a80919061bcf1565b905082602001518103618a97576001915050615dcf565b82516020840151819020912014905092915050565b60606000618ab98361a16c565b600101905060008167ffffffffffffffff811115618ad957618ad961aa9c565b6040519080825280601f01601f191660200182016040528015618b03576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084618b0d57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091618bd8905b82906182cc565b15618c1857505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c7790618bd1565b15618cb757505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d1690618bd1565b15618d5657505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618db590618bd1565b80618e1a5750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e1a90618bd1565b15618e5a57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c79000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618eb990618bd1565b80618f1e5750604080518082018252601081527f47504c2d332e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f1e90618bd1565b15618f5e57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618fbd90618bd1565b806190225750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261902290618bd1565b1561906257505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526190c190618bd1565b806191265750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261912690618bd1565b1561916657505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526191c590618bd1565b1561920557505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261926490618bd1565b156192a457505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261930390618bd1565b1561934357505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526193a290618bd1565b156193e257505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261944190618bd1565b1561948157505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526194e090618bd1565b806195455750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261954590618bd1565b1561958557505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526195e490618bd1565b1561962457505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516161f7929060200161bdf5565b60608060005b84518110156196c6578185828151811061965d5761965d61ad41565b602002602001015160405160200161967692919061b1cd565b604051602081830303815290604052915060018551619695919061bcf1565b81146196be57816040516020016196ac919061bf5e565b60405160208183030381529060405291505b600101619641565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816196df579050509050838160008151811061970a5761970a61ad41565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061975e5761975e61ad41565b6020026020010181905250818160028151811061977d5761977d61ad41565b6020908102919091010152949350505050565b60208083015183518351928401516000936197ae929184919061a24e565b14159392505050565b604080518082019091526000808252602082015260006197e9846000015185602001518560000151866020015161a35f565b90508360200151816197fb919061bcf1565b8451859061980a90839061bcf1565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561983e575081615dcf565b60208083015190840151600191146198655750815160208481015190840151829020919020145b80156198965782518451859061987c90839061bcf1565b905250825160208501805161989290839061bde2565b9052505b509192915050565b60408051808201909152600080825260208201526198bd83838361a47f565b5092915050565b60606000826000015167ffffffffffffffff8111156198e5576198e561aa9c565b6040519080825280601f01601f19166020018201604052801561990f576020820181803683370190505b50905060006020820190506198bd818560200151866000015161a52a565b8151815160009190811115619940575081515b6020808501519084015160005b838110156199f957825182518082146199c95760001960208710156199a85760018461997a89602061bcf1565b619984919061bde2565b61998f90600861bf9f565b61999a90600261c09d565b6199a4919061bcf1565b1990505b81811683821681810391146199c6579750615dcf9650505050505050565b50505b6199d460208661bde2565b94506199e160208561bde2565b935050506020816199f2919061bde2565b905061994d565b5084518651616f74919061c0a9565b60606000619a146167f3565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081619a3157905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280619a8c9061b7f2565b935060ff1681518110619aa157619aa161ad41565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619af2919061c0c9565b604051602081830303815290604052828280619b0d9061b7f2565b935060ff1681518110619b2257619b2261ad41565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280619b6f9061b7f2565b935060ff1681518110619b8457619b8461ad41565b602002602001018190525082604051602001619ba0919061b6f1565b604051602081830303815290604052828280619bbb9061b7f2565b935060ff1681518110619bd057619bd061ad41565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280619c1d9061b7f2565b935060ff1681518110619c3257619c3261ad41565b6020026020010181905250619c47878461a5a4565b8282619c528161b7f2565b935060ff1681518110619c6757619c6761ad41565b602090810291909101015285515115619d135760408051808201909152600b81527f2d2d7265666572656e636500000000000000000000000000000000000000000060208201528282619cb98161b7f2565b935060ff1681518110619cce57619cce61ad41565b6020026020010181905250619ce786600001518461a5a4565b8282619cf28161b7f2565b935060ff1681518110619d0757619d0761ad41565b60200260200101819052505b856080015115619d815760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b000000000000000060208201528282619d5c8161b7f2565b935060ff1681518110619d7157619d7161ad41565b6020026020010181905250619de7565b8415619de75760408051808201909152601281527f2d2d726571756972655265666572656e6365000000000000000000000000000060208201528282619dc68161b7f2565b935060ff1681518110619ddb57619ddb61ad41565b60200260200101819052505b60408601515115619e835760408051808201909152600d81527f2d2d756e73616665416c6c6f770000000000000000000000000000000000000060208201528282619e318161b7f2565b935060ff1681518110619e4657619e4661ad41565b60200260200101819052508560400151828280619e629061b7f2565b935060ff1681518110619e7757619e7761ad41565b60200260200101819052505b856060015115619eed5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d657300000000000000000000000060208201528282619ecc8161b7f2565b935060ff1681518110619ee157619ee161ad41565b60200260200101819052505b60008160ff1667ffffffffffffffff811115619f0b57619f0b61aa9c565b604051908082528060200260200182016040528015619f3e57816020015b6060815260200190600190039081619f295790505b50905060005b8260ff168160ff161015619f9757838160ff1681518110619f6757619f6761ad41565b6020026020010151828260ff1681518110619f8457619f8461ad41565b6020908102919091010152600101619f44565b50979650505050505050565b6040805180820190915260008082526020820152815183511015619fc8575081615dcf565b81518351602085015160009291619fde9161bde2565b619fe8919061bcf1565b6020840151909150600190821461a009575082516020840151819020908220145b801561a0245783518551869061a02090839061bcf1565b9052505b50929392505050565b600080826000015161a051856000015186602001518660000151876020015161a35f565b61a05b919061bde2565b90505b8351602085015161a06f919061bde2565b81116198bd578161a07f8161c10e565b925050826000015161a0b685602001518361a09a919061bcf1565b865161a0a6919061bcf1565b838660000151876020015161a35f565b61a0c0919061bde2565b905061a05e565b6060600061a0d5848461a02d565b61a0e090600161bde2565b67ffffffffffffffff81111561a0f85761a0f861aa9c565b60405190808252806020026020018201604052801561a12b57816020015b606081526020019060019003908161a1165790505b50905060005b81518110156181c25761a1476184e7868661989e565b82828151811061a1595761a15961ad41565b602090810291909101015260010161a131565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061a1b5577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061a1e1576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061a1ff57662386f26fc10000830492506010015b6305f5e100831061a217576305f5e100830492506008015b612710831061a22b57612710830492506004015b6064831061a23d576064830492506002015b600a8310615dcf5760010192915050565b60008085841161a355576020841161a301576000841561a29957600161a27586602061bcf1565b61a28090600861bf9f565b61a28b90600261c09d565b61a295919061bcf1565b1990505b835181168561a2a8898961bde2565b61a2b2919061bcf1565b805190935082165b81811461a2ec5787841161a2d45787945050505050617df3565b8361a2de8161c128565b94505082845116905061a2ba565b61a2f6878561bde2565b945050505050617df3565b83832061a30e858861bcf1565b61a318908761bde2565b91505b85821061a3535784822080820361a3405761a336868461bde2565b9350505050617df3565b61a34b60018461bcf1565b92505061a31b565b505b5092949350505050565b6000838186851161a46a576020851161a419576000851561a3ab57600161a38787602061bcf1565b61a39290600861bf9f565b61a39d90600261c09d565b61a3a7919061bcf1565b1990505b8451811660008761a3bc8b8b61bde2565b61a3c6919061bcf1565b855190915083165b82811461a40b5781861061a3f35761a3e68b8b61bde2565b9650505050505050617df3565b8561a3fd8161c10e565b96505083865116905061a3ce565b859650505050505050617df3565b508383206000905b61a42b868961bcf1565b821161a4685785832080820361a4475783945050505050617df3565b61a45260018561bde2565b935050818061a4609061c10e565b92505061a421565b505b61a474878761bde2565b979650505050505050565b6040805180820190915260008082526020820152600061a4b1856000015186602001518660000151876020015161a35f565b60208087018051918601919091525190915061a4cd908261bcf1565b83528451602086015161a4e0919061bde2565b810361a4ef576000855261a521565b8351835161a4fd919061bde2565b8551869061a50c90839061bcf1565b905250835161a51b908261bde2565b60208601525b50909392505050565b6020811061a562578151835261a54160208461bde2565b925061a54e60208361bde2565b915061a55b60208261bcf1565b905061a52a565b600019811561a59157600161a57883602061bcf1565b61a5849061010061c09d565b61a58e919061bcf1565b90505b9151835183169219169190911790915250565b6060600061a5b284846168c6565b805160208083015160405193945061a5cc9390910161c13f565b60405160208183030381529060405291505092915050565b610c9f8061c19883390190565b6112a68061ce3783390190565b610f2a8061e0dd83390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a64e61a653565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a64e6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a7055783516001600160a01b031683526020938401939092019160010161a6de565b509095945050505050565b60005b8381101561a72b57818101518382015260200161a713565b50506000910152565b6000815180845261a74c81602086016020860161a710565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a85c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a842577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a82c84865161a734565b602095860195909450929092019160010161a7f2565b50919750505060209485019492909201915060010161a788565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a8bc5781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a87c565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a85c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a932604088018261a734565b905060208201519150868103602088015261a94d818361a868565b96505050602093840193919091019060010161a8ee565b600082825180855260208501945060208160051b8301016020850160005b8381101561a9b457601f1985840301885261a99e83835161a734565b602098890198909350919091019060010161a982565b50909695505050505050565b60208152600061600b602083018461a964565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a85c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261aa54604087018261a868565b955050602093840193919091019060010161a9fb565b6001600160a01b0384541681526001600160a01b03831660208201526060604082015260006187a8606083018461a734565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561aaee5761aaee61aa9c565b60405290565b60008067ffffffffffffffff84111561ab0f5761ab0f61aa9c565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561ab3e5761ab3e61aa9c565b60405283815290508082840185101561ab5657600080fd5b6181c284602083018561a710565b600082601f83011261ab7557600080fd5b61600b8383516020850161aaf4565b60006020828403121561ab9657600080fd5b815167ffffffffffffffff81111561abad57600080fd5b615dcb8482850161ab64565b60208152600061600b602083018461a734565b60006020828403121561abde57600080fd5b8151801515811461600b57600080fd5b600181811c9082168061ac0257607f821691505b6020821081036187c2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f82111561293557806000526020600020601f840160051c8101602085101561ac625750805b601f840160051c820191505b81811015611db3576000815560010161ac6e565b815167ffffffffffffffff81111561ac9c5761ac9c61aa9c565b61acb08161acaa845461abee565b8461ac3b565b6020601f82116001811461ace4576000831561accc5750848201515b600019600385901b1c1916600184901b178455611db3565b600084815260208120601f198516915b8281101561ad14578785015182556020948501946001909201910161acf4565b508482101561ad325786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081518084526020840193506020830160005b8281101561a8bc57815186526020958601959091019060010161ad84565b60608152600061adb5606083018661a964565b828103602084015261adc7818661ad70565b9150508215156040830152949350505050565b6001600160a01b0384511681526001600160a01b03831660208201526060604082015260006187a8606083018461a734565b6001600160a01b03841681528260208201526060604082015260006187a8606083018461a734565b828152604060208201526000617df3604083018461a734565b6001600160a01b0381541682526001600160a01b03600182015416602083015260028101546040830152600060038201608060608501526000815461ae918161abee565b806080880152600182166000811461aeb0576001811461aeea5761af1e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660a089015260a082151560051b890101935061af1e565b84600052602060002060005b8381101561af155781548a820160a0015260019091019060200161aef6565b890160a0019450505b50919695505050505050565b6001600160a01b038416815260606020820152600061af4c606083018561a734565b8281036040840152616f74818561ae4d565b60006020828403121561af7057600080fd5b81516001600160a01b038116811461600b57600080fd5b60608152600061af9a606083018661a734565b602083019490945250901515604090910152919050565b6001600160a01b038616815284602082015260a06040820152600061afd960a083018661a734565b6060830194909452509015156080909101529392505050565b6001600160a01b0383168152604060208201526000617df3604083018461a734565b6001600160a01b03861681526001600160a01b038516602082015283604082015260a06060820152600061b04b60a083018561a734565b828103608084015261b05d818561ae4d565b98975050505050505050565b60006020828403121561b07b57600080fd5b5051919050565b6001600160a01b0386541681526001600160a01b03851660208201526001600160a01b038416604082015282606082015260a06080820152600061a47460a083018461a734565b6001600160a01b038516815260806020820152600061b0eb608083018661a964565b828103604084015261b0fd818661ad70565b915050821515606083015295945050505050565b6001600160a01b0383168152604060208201526000617df3604083018461ae4d565b83815260606020820152600061af4c606083018561a734565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161b18481601a85016020880161a710565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161b1c181601c84016020880161a710565b01601c01949350505050565b6000835161b1df81846020880161a710565b83519083019061b1f381836020880161a710565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161b23481601a85016020880161a710565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161b27181603384016020880161a710565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006187a8606083018461a734565b60408152600b60408201527f464f554e4452595f4f5554000000000000000000000000000000000000000000606082015260806020820152600061600b608083018461a734565b60006020828403121561b33157600080fd5b815167ffffffffffffffff81111561b34857600080fd5b8201601f8101841361b35957600080fd5b615dcb8482516020840161aaf4565b6000855161b37a818460208a0161a710565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161b3b4816001840160208a0161a710565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161b3f281600284016020890161a710565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161b43481600284016020880161a710565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061b47f604083018461a734565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161b4f681601f85016020870161a710565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061b563604083018461a734565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061b5b5604083018461a734565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161b62c81601485016020870161a710565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061b673604083018561a734565b8281036020840152616007818561a734565b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b6bd81600185016020870161a710565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b70381846020870161a710565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b7b681604b85016020870161a710565b91909101604b0192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff810361b8085761b80861b7c3565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b86f81602985016020870161a710565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f5041544800000000000000000000606082015260806020820152600061600b608083018461a734565b60006020828403121561b8d557600080fd5b815167ffffffffffffffff81111561b8ec57600080fd5b82016060818503121561b8fe57600080fd5b61b90661aacb565b81518060030b811461b91757600080fd5b8152602082015167ffffffffffffffff81111561b93357600080fd5b61b93f8682850161ab64565b602083015250604082015167ffffffffffffffff81111561b95f57600080fd5b61b96b8682850161ab64565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b9d781602185016020870161a710565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161bbc381602185016020880161a710565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161bc0081602e84016020880161a710565b01602e01949350505050565b6000825161bc1e81846020870161a710565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b86f81602985016020870161a710565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161bce481602285016020870161a710565b9190910160220192915050565b81810381811115615dcf57615dcf61b7c3565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161bd3c81600e85016020870161a710565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b80820180821115615dcf57615dcf61b7c3565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161be2d81601885016020880161a710565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161be6a81601c84016020880161a710565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161bf7081846020870161a710565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b8082028115828204841417615dcf57615dcf61b7c3565b6001815b600184111561bff15780850481111561bfd55761bfd561b7c3565b600184161561bfe357908102905b60019390931c92800261bfba565b935093915050565b60008261c00857506001615dcf565b8161c01557506000615dcf565b816001811461c02b576002811461c0355761c051565b6001915050615dcf565b60ff84111561c0465761c04661b7c3565b50506001821b615dcf565b5060208310610133831016604e8410600b841016171561c074575081810a615dcf565b61c081600019848461bfb6565b806000190482111561c0955761c09561b7c3565b029392505050565b600061600b838361bff9565b81810360008312801583831316838312821617156198bd576198bd61b7c3565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161c10181601c85016020870161a710565b91909101601c0192915050565b6000600019820361c1215761c12161b7c3565b5060010190565b60008161c1375761c13761b7c3565b506000190190565b6000835161c15181846020880161a710565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161c18b81600184016020880161a710565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a0033608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122001ec0ce060384773f3d3389fab7bed652c6b8ee389a7471cce10d00d87a75a0c64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610f06806100246000396000f3fe60806040526004361061006e5760003560e01c8063c51316911161004b578063c5131691146100d5578063c9028a36146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a214610077578063676cc054146100975780636ed70169146100c057005b3661007557005b005b34801561008357600080fd5b50610075610092366004610709565b610148565b6100aa6100a5366004610745565b6101de565b6040516100b79190610840565b60405180910390f35b3480156100cc57600080fd5b5061007561023f565b3480156100e157600080fd5b506100756100f0366004610709565b610274565b34801561010157600080fd5b50610075610110366004610853565b61034f565b6100756101233660046109b3565b61038b565b34801561013457600080fd5b50610075610143366004610a9f565b6103cf565b610150610404565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610447565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b60607fd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a35250161020e6020860186610b89565b848460405161021f93929190610bed565b60405180910390a1506040805160208101909152600081525b9392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61027c610404565b6000610289600285610c26565b9050806000036102c5576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102e773ffffffffffffffffffffffffffffffffffffffff8416338484610447565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f689a5a5cb55e795ffe4cd8b419cd3bb0a3373974c54d25f64e734d7388b93e9b3382604051610380929190610c61565b60405180910390a150565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa33348585856040516103c2959493929190610d53565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103c29493929190610ddd565b600260005403610440576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104dc9085906104e2565b50505050565b600061050473ffffffffffffffffffffffffffffffffffffffff84168361057d565b905080516000141580156105295750808060200190518101906105279190610e97565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061023883836000846000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105b09190610eb4565b60006040518083038185875af1925050503d80600081146105ed576040519150601f19603f3d011682016040523d82523d6000602084013e6105f2565b606091505b509150915061060286838361060c565b9695505050505050565b6060826106215761061c8261069b565b610238565b8151158015610645575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610694576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610574565b5080610238565b8051156106ab5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461070457600080fd5b919050565b60008060006060848603121561071e57600080fd5b8335925061072e602085016106e0565b915061073c604085016106e0565b90509250925092565b6000806000838503604081121561075b57600080fd5b602081121561076957600080fd5b50839250602084013567ffffffffffffffff81111561078757600080fd5b8401601f8101861361079857600080fd5b803567ffffffffffffffff8111156107af57600080fd5b8660208284010111156107c157600080fd5b939660209190910195509293505050565b60005b838110156107ed5781810151838201526020016107d5565b50506000910152565b6000815180845261080e8160208601602086016107d2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061023860208301846107f6565b60006020828403121561086557600080fd5b813567ffffffffffffffff81111561087c57600080fd5b82016080818503121561023857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156109045761090461088e565b604052919050565b600082601f83011261091d57600080fd5b813567ffffffffffffffff8111156109375761093761088e565b61096860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108bd565b81815284602083860101111561097d57600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106dd57600080fd5b80356107048161099a565b6000806000606084860312156109c857600080fd5b833567ffffffffffffffff8111156109df57600080fd5b6109eb8682870161090c565b935050602084013591506040840135610a038161099a565b809150509250925092565b600067ffffffffffffffff821115610a2857610a2861088e565b5060051b60200190565b600082601f830112610a4357600080fd5b8135610a56610a5182610a0e565b6108bd565b8082825260208201915060208360051b860101925085831115610a7857600080fd5b602085015b83811015610a95578035835260209283019201610a7d565b5095945050505050565b600080600060608486031215610ab457600080fd5b833567ffffffffffffffff811115610acb57600080fd5b8401601f81018613610adc57600080fd5b8035610aea610a5182610a0e565b8082825260208201915060208360051b850101925088831115610b0c57600080fd5b602084015b83811015610b4e57803567ffffffffffffffff811115610b3057600080fd5b610b3f8b60208389010161090c565b84525060209283019201610b11565b509550505050602084013567ffffffffffffffff811115610b6e57600080fd5b610b7a86828701610a32565b92505061073c604085016109a8565b600060208284031215610b9b57600080fd5b610238826106e0565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff84168152604060208201526000610c1d604083018486610ba4565b95945050505050565b600082610c5c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c9f836106e0565b16604082015273ffffffffffffffffffffffffffffffffffffffff610cc6602084016106e0565b166060820152600080604084013590508060808401525060608301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610d1257600080fd5b830160208101903567ffffffffffffffff811115610d2f57600080fd5b803603821315610d3e57600080fd5b608060a085015261060260c085018284610ba4565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d8860a08301866107f6565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610dd3578151865260209586019590910190600101610db5565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e70577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e5b8583516107f6565b94506020938401939190910190600101610e21565b505050508281036040840152610e868186610da1565b915050610c1d606083018415159052565b600060208284031215610ea957600080fd5b81516102388161099a565b60008251610ec68184602087016107d2565b919091019291505056fea2646970667358221220a40191c0a0256363e6edb7673accb387b7a3597d9a76c64faccadc4ce57c234664736f6c634300081a0033a2646970667358221220019a9b93a76602d8c0ca6729e6ddc7ef223c84977351ddb2cce6349dbc80620f64736f6c634300081a0033", } // GatewayEVMTestABI is the input ABI used to generate the binding from. @@ -2714,12 +2714,14 @@ func (it *GatewayEVMTestReceivedOnCallIterator) Close() error { // GatewayEVMTestReceivedOnCall represents a ReceivedOnCall event raised by the GatewayEVMTest contract. type GatewayEVMTestReceivedOnCall struct { - Raw types.Log // Blockchain specific contextual infos + Sender common.Address + Message []byte + Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedOnCall is a free log retrieval operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// FilterReceivedOnCall is a free log retrieval operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_GatewayEVMTest *GatewayEVMTestFilterer) FilterReceivedOnCall(opts *bind.FilterOpts) (*GatewayEVMTestReceivedOnCallIterator, error) { logs, sub, err := _GatewayEVMTest.contract.FilterLogs(opts, "ReceivedOnCall") @@ -2729,9 +2731,9 @@ func (_GatewayEVMTest *GatewayEVMTestFilterer) FilterReceivedOnCall(opts *bind.F return &GatewayEVMTestReceivedOnCallIterator{contract: _GatewayEVMTest.contract, event: "ReceivedOnCall", logs: logs, sub: sub}, nil } -// WatchReceivedOnCall is a free log subscription operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// WatchReceivedOnCall is a free log subscription operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_GatewayEVMTest *GatewayEVMTestFilterer) WatchReceivedOnCall(opts *bind.WatchOpts, sink chan<- *GatewayEVMTestReceivedOnCall) (event.Subscription, error) { logs, sub, err := _GatewayEVMTest.contract.WatchLogs(opts, "ReceivedOnCall") @@ -2766,9 +2768,9 @@ func (_GatewayEVMTest *GatewayEVMTestFilterer) WatchReceivedOnCall(opts *bind.Wa }), nil } -// ParseReceivedOnCall is a log parse operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// ParseReceivedOnCall is a log parse operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_GatewayEVMTest *GatewayEVMTestFilterer) ParseReceivedOnCall(log types.Log) (*GatewayEVMTestReceivedOnCall, error) { event := new(GatewayEVMTestReceivedOnCall) if err := _GatewayEVMTest.contract.UnpackLog(event, "ReceivedOnCall", log); err != nil { diff --git a/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go b/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go index 16a94c86..cb852372 100644 --- a/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go +++ b/v2/pkg/gatewayevmupgradetest.sol/gatewayevmupgradetest.go @@ -53,8 +53,8 @@ type RevertOptions struct { // GatewayEVMUpgradeTestMetaData contains all meta data concerning the GatewayEVMUpgradeTest contract. var GatewayEVMUpgradeTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"messageContext\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedV2\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161386d6100fd600039600081816121ee015281816122170152612685015261386d6000f3fe6080604052600436106101fe5760003560e01c80635c975abb1161011d578063aa0c0fc1116100b0578063cb7ba8e51161007f578063d547741f11610064578063d547741f1461066f578063dda79b751461068f578063e63ab1e9146106af57600080fd5b8063cb7ba8e51461063c578063d09e3b781461064f57600080fd5b8063aa0c0fc114610593578063ad3cb1cc146105b3578063ae7a3a6f146105fc578063c0c53b8b1461061c57600080fd5b80638456cb59116100ec5780638456cb59146104d057806391d14854146104e5578063a217fddf1461054a578063a783c7891461055f57600080fd5b80635c975abb1461043f5780635d62c86014610476578063726ac97c146104aa578063744b9b8b146104bd57600080fd5b806336568abe116101955780635131ab59116101645780635131ab59146103ca57806352d1902d146103ea57806357bec62f146103ff5780635b1125911461041f57600080fd5b806336568abe1461036f57806338e225271461038f5780633f4ba83a146103a25780634f1ef286146103b757600080fd5b80631cff79cd116101d15780631cff79cd1461029a57806321e093b1146102ba578063248a9ca3146102f25780632f2ff15d1461034f57600080fd5b806301ffc9a71461020357806310188aef14610238578063102614b01461025a5780631becceb41461027a575b600080fd5b34801561020f57600080fd5b5061022361021e366004612df1565b6106e3565b60405190151581526020015b60405180910390f35b34801561024457600080fd5b50610258610253366004612e4f565b61077c565b005b34801561026657600080fd5b50610258610275366004612e82565b610857565b34801561028657600080fd5b50610258610295366004612f33565b610951565b6102ad6102a8366004612f9a565b6109cf565b60405161022f919061303d565b3480156102c657600080fd5b506003546102da906001600160a01b031681565b6040516001600160a01b03909116815260200161022f565b3480156102fe57600080fd5b5061034161030d366004613050565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161022f565b34801561035b57600080fd5b5061025861036a366004613069565b610a87565b34801561037b57600080fd5b5061025861038a366004613069565b610acb565b6102ad61039d366004613095565b610b1c565b3480156103ae57600080fd5b50610258610c08565b6102586103c5366004613186565b610c3d565b3480156103d657600080fd5b506102586103e5366004613217565b610c5c565b3480156103f657600080fd5b50610341610f5c565b34801561040b57600080fd5b506002546102da906001600160a01b031681565b34801561042b57600080fd5b506001546102da906001600160a01b031681565b34801561044b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610223565b34801561048257600080fd5b506103417f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6102586104b8366004613286565b610f8b565b6102586104cb366004612f33565b611103565b3480156104dc57600080fd5b5061025861127f565b3480156104f157600080fd5b50610223610500366004613069565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561055657600080fd5b50610341600081565b34801561056b57600080fd5b506103417f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561059f57600080fd5b506102586105ae3660046132e6565b6112b1565b3480156105bf57600080fd5b506102ad6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561060857600080fd5b50610258610617366004612e4f565b61145a565b34801561062857600080fd5b5061025861063736600461337e565b611535565b61025861064a3660046133c1565b6117fc565b34801561065b57600080fd5b5061025861066a366004613434565b6119e4565b34801561067b57600080fd5b5061025861068a366004613069565b611adc565b34801561069b57600080fd5b506000546102da906001600160a01b031681565b3480156106bb57600080fd5b506103417f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061077657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061078781611b20565b6001600160a01b0382166107ae5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b0316156107f1576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61081b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b2a565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61085f611c17565b610867611c75565b826000036108a1576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166108c85760405163d92e233d60e01b815260040160405180910390fd5b6108d3338385611cf6565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c85858560405161091a939291906135d9565b60405180910390a361094b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b610959611c17565b610961611c75565b6001600160a01b0384166109885760405163d92e233d60e01b815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97485858560405161091a9392919061360f565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109fb81611b20565b610a03611c17565b6001600160a01b038516610a2a5760405163d92e233d60e01b815260040160405180910390fd5b6000610a37868686611f59565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546348787604051610a7693929190613635565b60405180910390a295945050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610ac181611b20565b61094b8383611b2a565b6001600160a01b0381163314610b0d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b17828261200c565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b4881611b20565b610b50611c17565b610b58611c75565b6001600160a01b038516610b7f5760405163d92e233d60e01b815260040160405180910390fd5b6060610b8d878787876120d0565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610bcc93929190613635565b60405180910390a29150610bff60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50949350505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c3281611b20565b610c3a612153565b50565b610c456121e3565b610c4e826122b3565b610c5882826122be565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610c8681611b20565b610c8e611c17565b610c96611c75565b83600003610cd0576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610cf75760405163d92e233d60e01b815260040160405180910390fd5b610d0186866123c4565b610d37576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc3919061364f565b610df9576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e04858484611f59565b50610e0f86866123c4565b610e45576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610ea5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec9919061366c565b90508015610edb57610edb8782612454565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382878787604051610f2293929190613635565b60405180910390a350610f5460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6000610f6661267a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610f93611c17565b610f9b611c75565b34600003610fd5576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610ffc5760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611049576040519150601f19603f3d011682016040523d82523d6000602084013e61104e565b606091505b5050905080611089576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c346000866040516110d1939291906135d9565b60405180910390a350610c5860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61110b611c17565b611113611c75565b3460000361114d576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166111745760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146111c1576040519150601f19603f3d011682016040523d82523d6000602084013e6111c6565b606091505b5050905080611201576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600088888860405161124d959493929190613685565b60405180910390a35061094b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6112a981611b20565b610c3a6126dc565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96112db81611b20565b6112e3611c17565b6112eb611c75565b84600003611325576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03861661134c5760405163d92e233d60e01b815260040160405180910390fd5b6113606001600160a01b0388168787612755565b6040517fc9028a360000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063c9028a36906113a5908590600401613728565b600060405180830381600087803b1580156113bf57600080fd5b505af11580156113d3573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e03587878787604051611420949392919061373b565b60405180910390a361145160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b600061146581611b20565b6001600160a01b03821661148c5760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b0316156114cf576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114f97f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b2a565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115805750825b905060008267ffffffffffffffff16600114801561159d5750303b155b9050811580156115ab575080155b156115e2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116435784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061166057506001600160a01b038716155b1561167e5760405163d92e233d60e01b815260040160405180910390fd5b6116866127c9565b61168e6127d1565b6116966127c9565b61169e6127e1565b6116a9600087611b2a565b506116d47f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b2a565b506116ff7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a89611b2a565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561175d7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b2a565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156117f25784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61182681611b20565b61182e611c17565b611836611c75565b6001600160a01b03851661185d5760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d80600081146118aa576040519150601f19603f3d011682016040523d82523d6000602084013e6118af565b606091505b50509050806118ea576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc9028a360000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063c9028a369061192f908690600401613728565b600060405180830381600087803b15801561194957600080fd5b505af115801561195d573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e035348888886040516119ab949392919061373b565b60405180910390a3506119dd60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6119ec611c17565b6119f4611c75565b84600003611a2e576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611a555760405163d92e233d60e01b815260040160405180910390fd5b611a60338587611cf6565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8787878787604051611aab959493929190613685565b60405180910390a3610f5460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611b1681611b20565b61094b838361200c565b610c3a81336127f1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611c0d576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611bc33390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610776565b6000915050610776565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c73576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cf0576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611e5a57611d216001600160a01b03831684308461287e565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611d8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db1919061364f565b611de7576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611e4657600080fd5b505af1158015611451573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015611ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee1919061364f565b611f17576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610b17906001600160a01b03848116918691168461287e565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060611f6583836128b7565b600080856001600160a01b0316348686604051611f83929190613772565b60006040518083038185875af1925050503d8060008114611fc0576040519150601f19603f3d011682016040523d82523d6000602084013e611fc5565b606091505b509150915081612001576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611c0d576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610776565b6060836001600160a01b031663676cc054348786866040518563ffffffff1660e01b815260040161210393929190613782565b60006040518083038185885af1158015612121573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261214a91908101906137ad565b95945050505050565b61215b61293c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061227c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166122707f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c73576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c5881611b20565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612318575060408051601f3d908101601f191682019092526123159181019061366c565b60015b61235e576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146123ba576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612355565b610b178383612997565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612005919061364f565b6003546001600160a01b03908116908316036125a3576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156124d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124fa919061364f565b612530576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561258f57600080fd5b505af1158015610f54573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612606573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262a919061364f565b612660576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610c58906001600160a01b03848116911683612755565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c73576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126e4611c17565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336121c5565b6040516001600160a01b03838116602483015260448201839052610b1791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506129ed565b611c73612a69565b6127d9612a69565b611c73612ad0565b6127e9612a69565b611c73612ad8565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610c58576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612355565b6040516001600160a01b03848116602483015283811660448301526064820183905261094b9186918216906323b872dd90608401612782565b60048110610c585781357f98933fac000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610b17576040517fed69977500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c73576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129a082612b29565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156129e557610b178282612bd1565b610c58612c3e565b6000612a026001600160a01b03841683612c76565b90508051600014158015612a27575080806020019051810190612a25919061364f565b155b15610b17576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612355565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c73576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f33612a69565b612ae0612a69565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612b78576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612355565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612bee919061381b565b600060405180830381855af49150503d8060008114612c29576040519150601f19603f3d011682016040523d82523d6000602084013e612c2e565b606091505b509150915061214a858383612c84565b3415611c73576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061200583836000612cf9565b606082612c9957612c9482612daf565b612005565b8151158015612cb057506001600160a01b0384163b155b15612cf2576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612355565b5080612005565b606081471015612d37576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401612355565b600080856001600160a01b03168486604051612d53919061381b565b60006040518083038185875af1925050503d8060008114612d90576040519150601f19603f3d011682016040523d82523d6000602084013e612d95565b606091505b5091509150612da5868383612c84565b9695505050505050565b805115612dbf5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612e0357600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461200557600080fd5b80356001600160a01b0381168114612e4a57600080fd5b919050565b600060208284031215612e6157600080fd5b61200582612e33565b600060a08284031215612e7c57600080fd5b50919050565b60008060008060808587031215612e9857600080fd5b612ea185612e33565b935060208501359250612eb660408601612e33565b9150606085013567ffffffffffffffff811115612ed257600080fd5b612ede87828801612e6a565b91505092959194509250565b60008083601f840112612efc57600080fd5b50813567ffffffffffffffff811115612f1457600080fd5b602083019150836020828501011115612f2c57600080fd5b9250929050565b60008060008060608587031215612f4957600080fd5b612f5285612e33565b9350602085013567ffffffffffffffff811115612f6e57600080fd5b612f7a87828801612eea565b909450925050604085013567ffffffffffffffff811115612ed257600080fd5b600080600060408486031215612faf57600080fd5b612fb884612e33565b9250602084013567ffffffffffffffff811115612fd457600080fd5b612fe086828701612eea565b9497909650939450505050565b60005b83811015613008578181015183820152602001612ff0565b50506000910152565b60008151808452613029816020860160208601612fed565b601f01601f19169290920160200192915050565b6020815260006120056020830184613011565b60006020828403121561306257600080fd5b5035919050565b6000806040838503121561307c57600080fd5b8235915061308c60208401612e33565b90509250929050565b60008060008084860360608112156130ac57600080fd5b60208112156130ba57600080fd5b508493506130ca60208601612e33565b9250604085013567ffffffffffffffff8111156130e657600080fd5b6130f287828801612eea565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613156576131566130fe565b604052919050565b600067ffffffffffffffff821115613178576131786130fe565b50601f01601f191660200190565b6000806040838503121561319957600080fd5b6131a283612e33565b9150602083013567ffffffffffffffff8111156131be57600080fd5b8301601f810185136131cf57600080fd5b80356131e26131dd8261315e565b61312d565b8181528660208385010111156131f757600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561322f57600080fd5b61323886612e33565b945061324660208701612e33565b935060408601359250606086013567ffffffffffffffff81111561326957600080fd5b61327588828901612eea565b969995985093965092949392505050565b6000806040838503121561329957600080fd5b6132a283612e33565b9150602083013567ffffffffffffffff8111156132be57600080fd5b6132ca85828601612e6a565b9150509250929050565b600060808284031215612e7c57600080fd5b60008060008060008060a087890312156132ff57600080fd5b61330887612e33565b955061331660208801612e33565b945060408701359350606087013567ffffffffffffffff81111561333957600080fd5b61334589828a01612eea565b909450925050608087013567ffffffffffffffff81111561336557600080fd5b61337189828a016132d4565b9150509295509295509295565b60008060006060848603121561339357600080fd5b61339c84612e33565b92506133aa60208501612e33565b91506133b860408501612e33565b90509250925092565b600080600080606085870312156133d757600080fd5b6133e085612e33565b9350602085013567ffffffffffffffff8111156133fc57600080fd5b61340887828801612eea565b909450925050604085013567ffffffffffffffff81111561342857600080fd5b612ede878288016132d4565b60008060008060008060a0878903121561344d57600080fd5b61345687612e33565b95506020870135945061346b60408801612e33565b9350606087013567ffffffffffffffff81111561348757600080fd5b61349389828a01612eea565b909450925050608087013567ffffffffffffffff8111156134b357600080fd5b61337189828a01612e6a565b8015158114610c3a57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261350257600080fd5b830160208101925035905067ffffffffffffffff81111561352257600080fd5b803603821315612f2c57600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b0361356d82612e33565b16825260006020820135613580816134bf565b151560208401526001600160a01b0361359b60408401612e33565b1660408401526135ae60608301836134cd565b60a060608601526135c360a086018284613531565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a06060820152600061214a60a083018461355c565b604081526000613623604083018587613531565b8281036020840152612da5818561355c565b83815260406020820152600061214a604083018486613531565b60006020828403121561366157600080fd5b8151612005816134bf565b60006020828403121561367e57600080fd5b5051919050565b8581526001600160a01b03851660208201526080604082015260006136ae608083018587613531565b82810360608401526136c0818561355c565b98975050505050505050565b6001600160a01b036136dd82612e33565b1682526001600160a01b036136f460208301612e33565b16602083015260408181013590830152600061371360608301836134cd565b6080606086015261214a608086018284613531565b60208152600061200560208301846136cc565b848152606060208201526000613755606083018587613531565b828103604084015261376781856136cc565b979650505050505050565b8183823760009101908152919050565b6001600160a01b0361379385612e33565b16815260406020820152600061214a604083018486613531565b6000602082840312156137bf57600080fd5b815167ffffffffffffffff8111156137d657600080fd5b8201601f810184136137e757600080fd5b80516137f56131dd8261315e565b81815285602083850101111561380a57600080fd5b61214a826020830160208601612fed565b6000825161382d818460208701612fed565b919091019291505056fea26469706673582212208b72f5389b712bdb905de4b6561d7eed975fa0feeef1beea3562eb3d8e499dc564736f6c634300081a0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ASSET_HANDLER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_PAYLOAD_SIZE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"custody\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"messageContext\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"messageContext\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConnector\",\"inputs\":[{\"name\":\"zetaConnector_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setCustody\",\"inputs\":[{\"name\":\"custody_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"zetaConnector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedV2\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZETANotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613abe6100fd6000396000818161235c01528181612385015261253d0152613abe6000f3fe6080604052600436106102195760003560e01c8063744b9b8b1161011d578063aa0c0fc1116100b0578063cb7ba8e51161007f578063d547741f11610064578063d547741f146106ad578063dda79b75146106cd578063e63ab1e9146106ed57600080fd5b8063cb7ba8e51461067a578063d09e3b781461068d57600080fd5b8063aa0c0fc1146105d1578063ad3cb1cc146105f1578063ae7a3a6f1461063a578063c0c53b8b1461065a57600080fd5b8063950837aa116100ec578063950837aa14610552578063a217fddf14610572578063a2ba193414610587578063a783c7891461059d57600080fd5b8063744b9b8b146104a55780637bbe9afa146104b85780638456cb59146104d857806391d14854146104ed57600080fd5b806338e22527116101b057806357bec62f1161017f5780635c975abb116101645780635c975abb146104275780635d62c8601461045e578063726ac97c1461049257600080fd5b806357bec62f146103e75780635b1125911461040757600080fd5b806338e225271461038a5780633f4ba83a146103aa5780634f1ef286146103bf57806352d1902d146103d257600080fd5b806321e093b1116101ec57806321e093b1146102b5578063248a9ca3146102ed5780632f2ff15d1461034a57806336568abe1461036a57600080fd5b806301ffc9a71461021e57806310188aef14610253578063102614b0146102755780631becceb414610295575b600080fd5b34801561022a57600080fd5b5061023e610239366004612fda565b610721565b60405190151581526020015b60405180910390f35b34801561025f57600080fd5b5061027361026e366004613038565b6107ba565b005b34801561028157600080fd5b5061027361029036600461306b565b610895565b3480156102a157600080fd5b506102736102b036600461311c565b6109d9565b3480156102c157600080fd5b506003546102d5906001600160a01b031681565b6040516001600160a01b03909116815260200161024a565b3480156102f957600080fd5b5061033c610308366004613183565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161024a565b34801561035657600080fd5b5061027361036536600461319c565b610aaa565b34801561037657600080fd5b5061027361038536600461319c565b610aee565b61039d6103983660046131da565b610b3f565b60405161024a919061328c565b3480156103b657600080fd5b50610273610c5b565b6102736103cd366004613327565b610c90565b3480156103de57600080fd5b5061033c610caf565b3480156103f357600080fd5b506002546102d5906001600160a01b031681565b34801561041357600080fd5b506001546102d5906001600160a01b031681565b34801561043357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661023e565b34801561046a57600080fd5b5061033c7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6102736104a03660046133b8565b610cde565b6102736104b336600461311c565b610ea0565b3480156104c457600080fd5b506102736104d3366004613406565b61106f565b3480156104e457600080fd5b506102736113a0565b3480156104f957600080fd5b5061023e61050836600461319c565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561055e57600080fd5b5061027361056d366004613038565b6113d2565b34801561057e57600080fd5b5061033c600081565b34801561059357600080fd5b5061033c61040081565b3480156105a957600080fd5b5061033c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156105dd57600080fd5b506102736105ec366004613498565b6114e9565b3480156105fd57600080fd5b5061039d6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561064657600080fd5b50610273610655366004613038565b611689565b34801561066657600080fd5b50610273610675366004613530565b611764565b610273610688366004613573565b611a2b565b34801561069957600080fd5b506102736106a83660046135e6565b611c13565b3480156106b957600080fd5b506102736106c836600461319c565b611d66565b3480156106d957600080fd5b506000546102d5906001600160a01b031681565b3480156106f957600080fd5b5061033c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107b457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60006107c581611daa565b6001600160a01b0382166107ec5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b03161561082f576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108597f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611db4565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61089d611ea1565b6108a5611eff565b826000036108df576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166109065760405163d92e233d60e01b815260040160405180910390fd5b6104006109166060830183613671565b90501115610950576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61095b338385611f80565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8585856040516109a2939291906137f0565b60405180910390a36109d360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b6109e1611ea1565b6109e9611eff565b6001600160a01b038416610a105760405163d92e233d60e01b815260040160405180910390fd5b610400610a206060830183613671565b610a2b915084613826565b1115610a63576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d9748585856040516109a293929190613860565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610ae481611daa565b6109d38383611db4565b6001600160a01b0381163314610b30576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b3a82826120c7565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b6b81611daa565b610b73611ea1565b610b7b611eff565b6001600160a01b038516610ba25760405163d92e233d60e01b815260040160405180910390fd5b60606000610bb36020890189613038565b6001600160a01b031603610bd357610bcc86868661218b565b9050610be2565b610bdf8787878761223e565b90505b856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546348787604051610c1f93929190613886565b60405180910390a29150610c5260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50949350505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c8581611daa565b610c8d6122c1565b50565b610c98612351565b610ca182612421565b610cab828261242c565b5050565b6000610cb9612532565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610ce6611ea1565b610cee611eff565b34600003610d28576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610d4f5760405163d92e233d60e01b815260040160405180910390fd5b610400610d5f6060830183613671565b90501115610d99576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610de6576040519150601f19603f3d011682016040523d82523d6000602084013e610deb565b606091505b5050905080610e26576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600086604051610e6e939291906137f0565b60405180910390a350610cab60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b610ea8611ea1565b610eb0611eff565b34600003610eea576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416610f115760405163d92e233d60e01b815260040160405180910390fd5b610400610f216060830183613671565b610f2c915084613826565b1115610f64576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610fb1576040519150601f19603f3d011682016040523d82523d6000602084013e610fb6565b606091505b5050905080610ff1576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600088888860405161103d9594939291906138a0565b60405180910390a3506109d360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961109981611daa565b6110a1611ea1565b6110a9611eff565b836000036110e3576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851661110a5760405163d92e233d60e01b815260040160405180910390fd5b6111148686612594565b61114a576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af11580156111b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d691906138e7565b61120c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121b6020890189613038565b6001600160a01b03160361123a5761123485848461218b565b50611248565b6112468786858561223e565b505b6112528686612594565b611288576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa1580156112e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130c9190613904565b9050801561131e5761131e8782612624565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161136593929190613886565b60405180910390a35061139760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6113ca81611daa565b610c8d61284a565b60006113dd81611daa565b6001600160a01b0382166114045760405163d92e233d60e01b815260040160405180910390fd5b60015461143b907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166120c7565b506114667f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83611db4565b50600154604080516001600160a01b03928316815291841660208301527f3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579910160405180910390a150600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961151381611daa565b61151b611ea1565b611523611eff565b8460000361155d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166115845760405163d92e233d60e01b815260040160405180910390fd5b6115986001600160a01b03881687876128c3565b6040517fc9028a360000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063c9028a36906115dd908590600401613979565b600060405180830381600087803b1580156115f757600080fd5b505af115801561160b573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e03587878787604051611658949392919061398c565b60405180910390a361139760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b600061169481611daa565b6001600160a01b0382166116bb5760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b0316156116fe576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117287f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611db4565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117af5750825b905060008267ffffffffffffffff1660011480156117cc5750303b155b9050811580156117da575080155b15611811576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118725784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061188f57506001600160a01b038716155b156118ad5760405163d92e233d60e01b815260040160405180910390fd5b6118b5612937565b6118bd61293f565b6118c5612937565b6118cd61294f565b6118d8600087611db4565b506119037f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611db4565b5061192e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a89611db4565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561198c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611db4565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611a215784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb611a5581611daa565b611a5d611ea1565b611a65611eff565b6001600160a01b038516611a8c5760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d8060008114611ad9576040519150601f19603f3d011682016040523d82523d6000602084013e611ade565b606091505b5050905080611b19576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc9028a360000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063c9028a3690611b5e908690600401613979565b600060405180830381600087803b158015611b7857600080fd5b505af1158015611b8c573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e03534888888604051611bda949392919061398c565b60405180910390a350611c0c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b611c1b611ea1565b611c23611eff565b84600003611c5d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611c845760405163d92e233d60e01b815260040160405180910390fd5b610400611c946060830183613671565b611c9f915084613826565b1115611cd7576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ce2338587611f80565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8787878787604051611d2d9594939291906138a0565b60405180910390a3611d5e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611da081611daa565b6109d383836120c7565b610c8d813361295f565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611e97576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611e4d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107b4565b60009150506107b4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611efd576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611f7a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611fc8576040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561202b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204f91906138e7565b612085576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610b3a906001600160a01b0384811691869116846129ec565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611e97576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107b4565b60606121978383612a25565b600080856001600160a01b03163486866040516121b59291906139c3565b60006040518083038185875af1925050503d80600081146121f2576040519150601f19603f3d011682016040523d82523d6000602084013e6121f7565b606091505b509150915081612233576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b6060836001600160a01b031663676cc054348786866040518563ffffffff1660e01b8152600401612271939291906139d3565b60006040518083038185885af115801561228f573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526122b891908101906139fe565b95945050505050565b6122c9612b25565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123ea57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123de7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611efd576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab81611daa565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612486575060408051601f3d908101601f1916820190925261248391810190613904565b60015b6124cc576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612528576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016124c3565b610b3a8383612b80565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611efd576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612600573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223791906138e7565b6003546001600160a01b0390811690831603612773576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156126a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ca91906138e7565b612700576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561275f57600080fd5b505af1158015611d5e573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156127d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fa91906138e7565b612830576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610cab906001600160a01b038481169116836128c3565b612852611ea1565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612333565b6040516001600160a01b03838116602483015260448201839052610b3a91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612bd6565b611efd612c52565b612947612c52565b611efd612cb9565b612957612c52565b611efd612cc1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610cab576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016124c3565b6040516001600160a01b0384811660248301528381166044830152606482018390526109d39186918216906323b872dd906084016128f0565b60048110610cab5781357f98933fac000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601612aaa576040517fed69977500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f36fd75ca000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610b3a576040517ff3459a9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611efd576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b8982612d12565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612bce57610b3a8282612dba565b610cab612e27565b6000612beb6001600160a01b03841683612e5f565b90508051600014158015612c10575080806020019051810190612c0e91906138e7565b155b15610b3a576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016124c3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611efd576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120a1612c52565b612cc9612c52565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612d61576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016124c3565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612dd79190613a6c565b600060405180830381855af49150503d8060008114612e12576040519150601f19603f3d011682016040523d82523d6000602084013e612e17565b606091505b50915091506122b8858383612e6d565b3415611efd576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061223783836000612ee2565b606082612e8257612e7d82612f98565b612237565b8151158015612e9957506001600160a01b0384163b155b15612edb576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016124c3565b5080612237565b606081471015612f20576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016124c3565b600080856001600160a01b03168486604051612f3c9190613a6c565b60006040518083038185875af1925050503d8060008114612f79576040519150601f19603f3d011682016040523d82523d6000602084013e612f7e565b606091505b5091509150612f8e868383612e6d565b9695505050505050565b805115612fa85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612fec57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461223757600080fd5b80356001600160a01b038116811461303357600080fd5b919050565b60006020828403121561304a57600080fd5b6122378261301c565b600060a0828403121561306557600080fd5b50919050565b6000806000806080858703121561308157600080fd5b61308a8561301c565b93506020850135925061309f6040860161301c565b9150606085013567ffffffffffffffff8111156130bb57600080fd5b6130c787828801613053565b91505092959194509250565b60008083601f8401126130e557600080fd5b50813567ffffffffffffffff8111156130fd57600080fd5b60208301915083602082850101111561311557600080fd5b9250929050565b6000806000806060858703121561313257600080fd5b61313b8561301c565b9350602085013567ffffffffffffffff81111561315757600080fd5b613163878288016130d3565b909450925050604085013567ffffffffffffffff8111156130bb57600080fd5b60006020828403121561319557600080fd5b5035919050565b600080604083850312156131af57600080fd5b823591506131bf6020840161301c565b90509250929050565b60006020828403121561306557600080fd5b600080600080606085870312156131f057600080fd5b6131fa86866131c8565b93506132086020860161301c565b9250604085013567ffffffffffffffff81111561322457600080fd5b613230878288016130d3565b95989497509550505050565b60005b8381101561325757818101518382015260200161323f565b50506000910152565b6000815180845261327881602086016020860161323c565b601f01601f19169290920160200192915050565b6020815260006122376020830184613260565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156132f7576132f761329f565b604052919050565b600067ffffffffffffffff8211156133195761331961329f565b50601f01601f191660200190565b6000806040838503121561333a57600080fd5b6133438361301c565b9150602083013567ffffffffffffffff81111561335f57600080fd5b8301601f8101851361337057600080fd5b803561338361337e826132ff565b6132ce565b81815286602083850101111561339857600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080604083850312156133cb57600080fd5b6133d48361301c565b9150602083013567ffffffffffffffff8111156133f057600080fd5b6133fc85828601613053565b9150509250929050565b60008060008060008060a0878903121561341f57600080fd5b61342988886131c8565b95506134376020880161301c565b94506134456040880161301c565b935060608701359250608087013567ffffffffffffffff81111561346857600080fd5b61347489828a016130d3565b979a9699509497509295939492505050565b60006080828403121561306557600080fd5b60008060008060008060a087890312156134b157600080fd5b6134ba8761301c565b95506134c86020880161301c565b945060408701359350606087013567ffffffffffffffff8111156134eb57600080fd5b6134f789828a016130d3565b909450925050608087013567ffffffffffffffff81111561351757600080fd5b61352389828a01613486565b9150509295509295509295565b60008060006060848603121561354557600080fd5b61354e8461301c565b925061355c6020850161301c565b915061356a6040850161301c565b90509250925092565b6000806000806060858703121561358957600080fd5b6135928561301c565b9350602085013567ffffffffffffffff8111156135ae57600080fd5b6135ba878288016130d3565b909450925050604085013567ffffffffffffffff8111156135da57600080fd5b6130c787828801613486565b60008060008060008060a087890312156135ff57600080fd5b6136088761301c565b95506020870135945061361d6040880161301c565b9350606087013567ffffffffffffffff81111561363957600080fd5b61364589828a016130d3565b909450925050608087013567ffffffffffffffff81111561366557600080fd5b61352389828a01613053565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136a657600080fd5b83018035915067ffffffffffffffff8211156136c157600080fd5b60200191503681900382131561311557600080fd5b8015158114610c8d57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261371957600080fd5b830160208101925035905067ffffffffffffffff81111561373957600080fd5b80360382131561311557600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b036137848261301c565b16825260006020820135613797816136d6565b151560208401526001600160a01b036137b26040840161301c565b1660408401526137c560608301836136e4565b60a060608601526137da60a086018284613748565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a0606082015260006122b860a0830184613773565b808201808211156107b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b604081526000613874604083018587613748565b8281036020840152612f8e8185613773565b8381526040602082015260006122b8604083018486613748565b8581526001600160a01b03851660208201526080604082015260006138c9608083018587613748565b82810360608401526138db8185613773565b98975050505050505050565b6000602082840312156138f957600080fd5b8151612237816136d6565b60006020828403121561391657600080fd5b5051919050565b6001600160a01b0361392e8261301c565b1682526001600160a01b036139456020830161301c565b16602083015260408181013590830152600061396460608301836136e4565b608060608601526122b8608086018284613748565b602081526000612237602083018461391d565b8481526060602082015260006139a6606083018587613748565b82810360408401526139b8818561391d565b979650505050505050565b8183823760009101908152919050565b6001600160a01b036139e48561301c565b1681526040602082015260006122b8604083018486613748565b600060208284031215613a1057600080fd5b815167ffffffffffffffff811115613a2757600080fd5b8201601f81018413613a3857600080fd5b8051613a4661337e826132ff565b818152856020838501011115613a5b57600080fd5b6122b882602083016020860161323c565b60008251613a7e81846020870161323c565b919091019291505056fea26469706673582212206b5ea992fec97333d1ee4708664e5b63fd6fbfbbc65762aac1b37caeb1d3880464736f6c634300081a0033", } // GatewayEVMUpgradeTestABI is the input ABI used to generate the binding from. @@ -286,6 +286,37 @@ func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestCallerSession) DEFAULTADMINRO return _GatewayEVMUpgradeTest.Contract.DEFAULTADMINROLE(&_GatewayEVMUpgradeTest.CallOpts) } +// MAXPAYLOADSIZE is a free data retrieval call binding the contract method 0xa2ba1934. +// +// Solidity: function MAX_PAYLOAD_SIZE() view returns(uint256) +func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestCaller) MAXPAYLOADSIZE(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _GatewayEVMUpgradeTest.contract.Call(opts, &out, "MAX_PAYLOAD_SIZE") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MAXPAYLOADSIZE is a free data retrieval call binding the contract method 0xa2ba1934. +// +// Solidity: function MAX_PAYLOAD_SIZE() view returns(uint256) +func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestSession) MAXPAYLOADSIZE() (*big.Int, error) { + return _GatewayEVMUpgradeTest.Contract.MAXPAYLOADSIZE(&_GatewayEVMUpgradeTest.CallOpts) +} + +// MAXPAYLOADSIZE is a free data retrieval call binding the contract method 0xa2ba1934. +// +// Solidity: function MAX_PAYLOAD_SIZE() view returns(uint256) +func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestCallerSession) MAXPAYLOADSIZE() (*big.Int, error) { + return _GatewayEVMUpgradeTest.Contract.MAXPAYLOADSIZE(&_GatewayEVMUpgradeTest.CallOpts) +} + // PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. // // Solidity: function PAUSER_ROLE() view returns(bytes32) @@ -763,46 +794,25 @@ func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactorSession) DepositAnd return _GatewayEVMUpgradeTest.Contract.DepositAndCall0(&_GatewayEVMUpgradeTest.TransactOpts, receiver, amount, asset, payload, revertOptions) } -// Execute is a paid mutator transaction binding the contract method 0x1cff79cd. -// -// Solidity: function execute(address destination, bytes data) payable returns(bytes) -func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactor) Execute(opts *bind.TransactOpts, destination common.Address, data []byte) (*types.Transaction, error) { - return _GatewayEVMUpgradeTest.contract.Transact(opts, "execute", destination, data) -} - -// Execute is a paid mutator transaction binding the contract method 0x1cff79cd. -// -// Solidity: function execute(address destination, bytes data) payable returns(bytes) -func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestSession) Execute(destination common.Address, data []byte) (*types.Transaction, error) { - return _GatewayEVMUpgradeTest.Contract.Execute(&_GatewayEVMUpgradeTest.TransactOpts, destination, data) -} - -// Execute is a paid mutator transaction binding the contract method 0x1cff79cd. -// -// Solidity: function execute(address destination, bytes data) payable returns(bytes) -func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactorSession) Execute(destination common.Address, data []byte) (*types.Transaction, error) { - return _GatewayEVMUpgradeTest.Contract.Execute(&_GatewayEVMUpgradeTest.TransactOpts, destination, data) -} - -// Execute0 is a paid mutator transaction binding the contract method 0x38e22527. +// Execute is a paid mutator transaction binding the contract method 0x38e22527. // // Solidity: function execute((address) messageContext, address destination, bytes data) payable returns(bytes) -func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactor) Execute0(opts *bind.TransactOpts, messageContext MessageContext, destination common.Address, data []byte) (*types.Transaction, error) { - return _GatewayEVMUpgradeTest.contract.Transact(opts, "execute0", messageContext, destination, data) +func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactor) Execute(opts *bind.TransactOpts, messageContext MessageContext, destination common.Address, data []byte) (*types.Transaction, error) { + return _GatewayEVMUpgradeTest.contract.Transact(opts, "execute", messageContext, destination, data) } -// Execute0 is a paid mutator transaction binding the contract method 0x38e22527. +// Execute is a paid mutator transaction binding the contract method 0x38e22527. // // Solidity: function execute((address) messageContext, address destination, bytes data) payable returns(bytes) -func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestSession) Execute0(messageContext MessageContext, destination common.Address, data []byte) (*types.Transaction, error) { - return _GatewayEVMUpgradeTest.Contract.Execute0(&_GatewayEVMUpgradeTest.TransactOpts, messageContext, destination, data) +func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestSession) Execute(messageContext MessageContext, destination common.Address, data []byte) (*types.Transaction, error) { + return _GatewayEVMUpgradeTest.Contract.Execute(&_GatewayEVMUpgradeTest.TransactOpts, messageContext, destination, data) } -// Execute0 is a paid mutator transaction binding the contract method 0x38e22527. +// Execute is a paid mutator transaction binding the contract method 0x38e22527. // // Solidity: function execute((address) messageContext, address destination, bytes data) payable returns(bytes) -func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactorSession) Execute0(messageContext MessageContext, destination common.Address, data []byte) (*types.Transaction, error) { - return _GatewayEVMUpgradeTest.Contract.Execute0(&_GatewayEVMUpgradeTest.TransactOpts, messageContext, destination, data) +func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactorSession) Execute(messageContext MessageContext, destination common.Address, data []byte) (*types.Transaction, error) { + return _GatewayEVMUpgradeTest.Contract.Execute(&_GatewayEVMUpgradeTest.TransactOpts, messageContext, destination, data) } // ExecuteRevert is a paid mutator transaction binding the contract method 0xcb7ba8e5. @@ -826,25 +836,25 @@ func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactorSession) ExecuteRev return _GatewayEVMUpgradeTest.Contract.ExecuteRevert(&_GatewayEVMUpgradeTest.TransactOpts, destination, data, revertContext) } -// ExecuteWithERC20 is a paid mutator transaction binding the contract method 0x5131ab59. +// ExecuteWithERC20 is a paid mutator transaction binding the contract method 0x7bbe9afa. // -// Solidity: function executeWithERC20(address token, address to, uint256 amount, bytes data) returns() -func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactor) ExecuteWithERC20(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _GatewayEVMUpgradeTest.contract.Transact(opts, "executeWithERC20", token, to, amount, data) +// Solidity: function executeWithERC20((address) messageContext, address token, address to, uint256 amount, bytes data) returns() +func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactor) ExecuteWithERC20(opts *bind.TransactOpts, messageContext MessageContext, token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _GatewayEVMUpgradeTest.contract.Transact(opts, "executeWithERC20", messageContext, token, to, amount, data) } -// ExecuteWithERC20 is a paid mutator transaction binding the contract method 0x5131ab59. +// ExecuteWithERC20 is a paid mutator transaction binding the contract method 0x7bbe9afa. // -// Solidity: function executeWithERC20(address token, address to, uint256 amount, bytes data) returns() -func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestSession) ExecuteWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _GatewayEVMUpgradeTest.Contract.ExecuteWithERC20(&_GatewayEVMUpgradeTest.TransactOpts, token, to, amount, data) +// Solidity: function executeWithERC20((address) messageContext, address token, address to, uint256 amount, bytes data) returns() +func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestSession) ExecuteWithERC20(messageContext MessageContext, token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _GatewayEVMUpgradeTest.Contract.ExecuteWithERC20(&_GatewayEVMUpgradeTest.TransactOpts, messageContext, token, to, amount, data) } -// ExecuteWithERC20 is a paid mutator transaction binding the contract method 0x5131ab59. +// ExecuteWithERC20 is a paid mutator transaction binding the contract method 0x7bbe9afa. // -// Solidity: function executeWithERC20(address token, address to, uint256 amount, bytes data) returns() -func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactorSession) ExecuteWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _GatewayEVMUpgradeTest.Contract.ExecuteWithERC20(&_GatewayEVMUpgradeTest.TransactOpts, token, to, amount, data) +// Solidity: function executeWithERC20((address) messageContext, address token, address to, uint256 amount, bytes data) returns() +func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactorSession) ExecuteWithERC20(messageContext MessageContext, token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _GatewayEVMUpgradeTest.Contract.ExecuteWithERC20(&_GatewayEVMUpgradeTest.TransactOpts, messageContext, token, to, amount, data) } // GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. @@ -1036,6 +1046,27 @@ func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactorSession) Unpause() return _GatewayEVMUpgradeTest.Contract.Unpause(&_GatewayEVMUpgradeTest.TransactOpts) } +// UpdateTSSAddress is a paid mutator transaction binding the contract method 0x950837aa. +// +// Solidity: function updateTSSAddress(address newTSSAddress) returns() +func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactor) UpdateTSSAddress(opts *bind.TransactOpts, newTSSAddress common.Address) (*types.Transaction, error) { + return _GatewayEVMUpgradeTest.contract.Transact(opts, "updateTSSAddress", newTSSAddress) +} + +// UpdateTSSAddress is a paid mutator transaction binding the contract method 0x950837aa. +// +// Solidity: function updateTSSAddress(address newTSSAddress) returns() +func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestSession) UpdateTSSAddress(newTSSAddress common.Address) (*types.Transaction, error) { + return _GatewayEVMUpgradeTest.Contract.UpdateTSSAddress(&_GatewayEVMUpgradeTest.TransactOpts, newTSSAddress) +} + +// UpdateTSSAddress is a paid mutator transaction binding the contract method 0x950837aa. +// +// Solidity: function updateTSSAddress(address newTSSAddress) returns() +func (_GatewayEVMUpgradeTest *GatewayEVMUpgradeTestTransactorSession) UpdateTSSAddress(newTSSAddress common.Address) (*types.Transaction, error) { + return _GatewayEVMUpgradeTest.Contract.UpdateTSSAddress(&_GatewayEVMUpgradeTest.TransactOpts, newTSSAddress) +} + // UpgradeToAndCall is a paid mutator transaction binding the contract method 0x4f1ef286. // // Solidity: function upgradeToAndCall(address newImplementation, bytes data) payable returns() diff --git a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go index 1f043d97..98483acd 100644 --- a/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go +++ b/v2/pkg/gatewayevmzevm.t.sol/gatewayevmzevmtest.go @@ -72,8 +72,8 @@ type StdInvariantFuzzSelector struct { // GatewayEVMZEVMTestMetaData contains all meta data concerning the GatewayEVMZEVMTest contract. var GatewayEVMZEVMTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"callOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structCallOptions\",\"components\":[{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"isArbitraryCall\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedOnCall\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"callOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structCallOptions\",\"components\":[{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"isArbitraryCall\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotProtocol\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrProtocol\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061ea318061003c6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b6101326112fe565b60405161013f9190617be1565b60405180910390f35b610150611360565b60405161013f9190617c7d565b6101326114a2565b610132611502565b610128611562565b61017d611de6565b60405161013f9190617de3565b610128611f68565b61019a6127b1565b60405161013f9190617e81565b6101af612881565b60405161013f9190617ef8565b61012861297c565b6101af612f9e565b61019a613099565b6101dc613169565b604051901515815260200161013f565b61012861323d565b610132613976565b601f546101dc9060ff1681565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680548216611234179055602780548216615678179055602d805490911661432117905560405161026790617ae7565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161033190617ae7565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190851660248201526044810193909352921660648201526000916104a7916084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526139d6565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0384811682029290921792839055604080518082018252601081527f4552433230437573746f64792e736f6c000000000000000000000000000000006020820152602754602554925193909504841660248401529383166044830152909116606482015291925061054a9160840161044a565b602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091178255604080518082018252601a81527f5a657461436f6e6e6563746f724e6f6e4e61746976652e736f6c00000000000093810193909352601f546023546027546025549351610100909304851660248401529084166044830152831660648201529116608482015291925061064e9160a40160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff8c8765e000000000000000000000000000000000000000000000000000000001790526139d6565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091179091556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561070057600080fd5b505af1158015610714573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561078a57600080fd5b505af115801561079e573d6000803e3d6000fd5b5050601f546020546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f9150602401600060405180830381600087803b15801561080957600080fd5b505af115801561081d573d6000803e3d6000fd5b5050601f546021546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef9150602401600060405180830381600087803b15801561088857600080fd5b505af115801561089c573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108fe57600080fd5b505af1158015610912573d6000803e3d6000fd5b50506022546025546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561098157600080fd5b505af1158015610995573d6000803e3d6000fd5b50506022546020546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af1158015610a09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2d9190617f8f565b50604051610a3a90617af4565b604051809103906000f080158015610a56573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316178155604080518082018252600f81527f476174657761795a45564d2e736f6c00000000000000000000000000000000006020820152602354602d5492519085169381019390935292166044820152610b3c919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc955000000000000000000000000000000000000000000000000000000001790526139d6565b602880546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602980549092168117909155604051610b8d90617b01565b6001600160a01b039091168152602001604051809103906000f080158015610bb9573d6000803e3d6000fd5b50602a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c6e57600080fd5b505af1158015610c82573d6000803e3d6000fd5b505050506000806000604051610c9790617b0e565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610cd3573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602954604051601293600193600093849391921690610d2990617b1b565b610d3896959493929190617fb1565b604051809103906000f080158015610d54573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602b546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610deb57600080fd5b505af1158015610dff573d6000803e3d6000fd5b5050602b546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b5050602c54602d546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ef1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f159190617f8f565b50602c54602a546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faa9190617f8f565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561100957600080fd5b505af115801561101d573d6000803e3d6000fd5b5050602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561109357600080fd5b505af11580156110a7573d6000803e3d6000fd5b5050602c546029546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af115801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190617f8f565b506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156111c057600080fd5b505af11580156111d4573d6000803e3d6000fd5b5050604080518082018252600180825260006020928301819052602e829055602f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055835160a08101855261032180825281850193845281860190815285519485019095528184526060810184905260808101919091528051603080549351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009094166001600160a01b0392831617939093178355935160318054919095167fffffffffffffffffffffffff000000000000000000000000000000000000000091909116179093559193509091506032906112ec9082618171565b50608082015181600301559050505050565b6060601680548060200260200160405190810160405280929190818152602001828054801561135657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611338575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561149957600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156114825783829060005260206000200180546113f5906180d5565b80601f0160208091040260200160405190810160405280929190818152602001828054611421906180d5565b801561146e5780601f106114435761010080835404028352916020019161146e565b820191906000526020600020905b81548152906001019060200180831161145157829003601f168201915b5050505050815260200190600101906113d6565b505050508152505081526020019060010190611384565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015611356576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611338575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611356576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611338575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602c54602a805493517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03948516600482015292939092600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa15801561160e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116329190618230565b6040519091506000907fe04d4f97000000000000000000000000000000000000000000000000000000009061166f90889088908890602401618249565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526024549051919350600092611708926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602c5461173f926207a120916001600160a01b0316908690602e90603090602401618362565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7b15118b0000000000000000000000000000000000000000000000000000000017905260295490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916117fc916001600160a01b03919091169060009086906004016183d9565b600060405180830381600087803b15801561181657600080fd5b505af115801561182a573d6000803e3d6000fd5b5050602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156118a057600080fd5b505af11580156118b4573d6000803e3d6000fd5b5050602a5460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602c547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261194e926207a120916001600160a01b0316908d908d908d90600401618401565b600060405180830381600087803b15801561196857600080fd5b505af115801561197c573d6000803e3d6000fd5b5050601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b1580156119fd57600080fd5b505af1158015611a11573d6000803e3d6000fd5b5050602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611aa457600080fd5b505af1158015611ab8573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b031685898989604051611b08959493929190618456565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611ba257600080fd5b505af1158015611bb6573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611bfb9087908690618497565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611c7557600080fd5b505af1158015611c89573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd93508892611ce292169087906004016184b0565b60006040518083038185885af1158015611d00573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611d29919081019061858b565b50602c54602a546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db89190618230565b9050611ddc816001611dcd6207a120886185ef565b611dd791906185ef565b6139f5565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156114995783829060005260206000209060020201604051806040016040529081600082018054611e3d906180d5565b80601f0160208091040260200160405190810160405280929190818152602001828054611e69906180d5565b8015611eb65780601f10611e8b57610100808354040283529160200191611eb6565b820191906000526020600020905b815481529060010190602001808311611e9957829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611f5057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611efd5790505b50505050508152505081526020019060010190611e0a565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611fe490879087908790602401618249565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000949094169390931790925260295491517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b039093166084820152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156120d657600080fd5b505af11580156120ea573d6000803e3d6000fd5b5050602d5460245460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c9060340160408051601f19818403018152828252602c547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b03909216916207a1209188918491634d8943bb916004808201926020929091908290030181865afa1580156121bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e39190618230565b60408051808201825260018082526020820152905161220b9695949392918c91603090618602565b60405180910390a3602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561228557600080fd5b505af1158015612299573d6000803e3d6000fd5b50506029546024546040805160609290921b6bffffffffffffffffffffffff1916602083015280518083036014018152602c5460748401835260016034850181815260549095015291517f7b15118b0000000000000000000000000000000000000000000000000000000081526001600160a01b039485169650637b15118b95506123379491936207a1209392909216918991603090600401618672565b600060405180830381600087803b15801561235157600080fd5b505af1158015612365573d6000803e3d6000fd5b5050602c54602d546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156123d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f59190618230565b905061240881611dd7846207a1206185ef565b601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561248557600080fd5b505af1158015612499573d6000803e3d6000fd5b5050602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561252c57600080fd5b505af1158015612540573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b031685898989604051612590959493929190618456565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561262a57600080fd5b505af115801561263e573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f91506126839087908790618497565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156126fd57600080fd5b505af1158015612711573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd9350889261276a92169088906004016184b0565b60006040518083038185885af1158015612788573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611ddc919081019061858b565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156114995783829060005260206000200180546127f4906180d5565b80601f0160208091040260200160405190810160405280929190818152602001828054612820906180d5565b801561286d5780601f106128425761010080835404028352916020019161286d565b820191906000526020600020905b81548152906001019060200180831161285057829003601f168201915b5050505050815260200190600101906127d5565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156114995760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561296457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116129115790505b505050505081525050815260200190600101906128a5565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f9700000000000000000000000000000000000000000000000000000000906129f890879087908790602401618249565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602d5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612acb57600080fd5b505af1158015612adf573d6000803e3d6000fd5b50506029546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612b7157600080fd5b505af1158015612b85573d6000803e3d6000fd5b5050602c54602d5460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039283169450911691507f306ee13f48319a123b222c69908e44dcf91abffc20cacc502e3cf5a4ff23e0e49060340160408051601f198184030181528282018252600180845260208401529051612c0f9287916030906186c6565b60405180910390a360295460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03909116906306cb89839060340160408051601f19818403018152602c5483830183526001808552602085015291517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152612cb69391926001600160a01b0316918791603090600401618712565b600060405180830381600087803b158015612cd057600080fd5b505af1158015612ce4573d6000803e3d6000fd5b5050601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612d6557600080fd5b505af1158015612d79573d6000803e3d6000fd5b5050601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612e0f57600080fd5b505af1158015612e23573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612e689085908590618497565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612ee257600080fd5b505af1158015612ef6573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd93508692612f4f92169086906004016184b0565b60006040518083038185885af1158015612f6d573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052612f96919081019061858b565b505050505050565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156114995760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561308157602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161302e5790505b50505050508152505081526020019060010190612fc2565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156114995783829060005260206000200180546130dc906180d5565b80601f0160208091040260200160405190810160405280929190818152602001828054613108906180d5565b80156131555780601f1061312a57610100808354040283529160200191613155565b820191906000526020600020905b81548152906001019060200180831161313857829003601f168201915b5050505050815260200190600101906130bd565b60085460009060ff1615613181575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613212573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132369190618230565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f9700000000000000000000000000000000000000000000000000000000906132b990879087908790602401618249565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526024549051919350600092613352926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602c54613386926001600160a01b03909116908590602e9060309060240161877a565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06cb89830000000000000000000000000000000000000000000000000000000017905260295490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613443916001600160a01b03919091169060009086906004016183d9565b600060405180830381600087803b15801561345d57600080fd5b505af1158015613471573d6000803e3d6000fd5b5050602d546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156134e757600080fd5b505af11580156134fb573d6000803e3d6000fd5b5050602a5460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637a34d8bb915060340160408051601f1981840301815290829052602c547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b168352613592926001600160a01b03909116908b908b908b906004016187cb565b600060405180830381600087803b1580156135ac57600080fd5b505af11580156135c0573d6000803e3d6000fd5b5050601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561364157600080fd5b505af1158015613655573d6000803e3d6000fd5b5050602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156136e857600080fd5b505af11580156136fc573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b03168488888860405161374c959493929190618456565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156137e657600080fd5b505af11580156137fa573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f915061383f9086908690618497565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156138b957600080fd5b505af11580156138cd573d6000803e3d6000fd5b5050601f546024546040517f1cff79cd0000000000000000000000000000000000000000000000000000000081526001600160a01b0361010090930483169450631cff79cd9350879261392692169087906004016184b0565b60006040518083038185885af1158015613944573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261396d919081019061858b565b50505050505050565b60606015805480602002602001604051908101604052809291908181526020018280548015611356576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611338575050505050905090565b60006139e0617b28565b6139eb848483613a74565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015613a6057600080fd5b505afa158015612f96573d6000803e3d6000fd5b600080613a818584613aef565b9050613ae46040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613acf9291906184b0565b60405160208183030381529060405285613afb565b9150505b9392505050565b6000613ae88383613b29565b60c08101515160009015613b1f57613b1884848460c00151613b44565b9050613ae8565b613b188484613cea565b6000613b358383613dd5565b613ae883836020015184613afb565b600080613b4f613de5565b90506000613b5d8683613eb8565b90506000613b74826060015183602001518561435e565b90506000613b8483838989614570565b90506000613b91826153ed565b602081015181519192509060030b15613c0457898260400151604051602001613bbb929190618819565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613bfb9160040161889a565b60405180910390fd5b6000613c476040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016155bc565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613c9a90849060040161889a565b602060405180830381865afa158015613cb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cdb91906188ad565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613d3f90879060040161889a565b600060405180830381865afa158015613d5c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d84919081019061858b565b90506000613db28285604051602001613d9e9291906188d6565b6040516020818303038152906040526157bc565b90506001600160a01b0381166139eb578484604051602001613bbb929190618905565b613de1828260006157cf565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613e6c9084906004016189b0565b600060405180830381865afa158015613e89573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613eb191908101906189f7565b9250505090565b613eea6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613f356040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613f3e856158d2565b60208201526000613f4e86615cb7565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613f90573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613fb891908101906189f7565b86838560200151604051602001613fd29493929190618a40565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061402a90859060040161889a565b600060405180830381865afa158015614047573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261406f91908101906189f7565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906140b7908490600401618b44565b602060405180830381865afa1580156140d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140f89190617f8f565b61410d5781604051602001613bbb9190618b96565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614152908490600401618c28565b600060405180830381865afa15801561416f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261419791908101906189f7565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906141de908490600401618c7a565b602060405180830381865afa1580156141fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061421f9190617f8f565b156142b4576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614269908490600401618c7a565b600060405180830381865afa158015614286573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142ae91908101906189f7565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016142d99190618ccc565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614305929190618d38565b600060405180830381865afa158015614322573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261434a91908101906189f7565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161437a5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106143da576143da618d5d565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061442e5761442e618d5d565b60200260200101819052508460405160200161444a9190618d8c565b6040516020818303038152906040528160028151811061446c5761446c618d5d565b6020026020010181905250826040516020016144889190618df8565b604051602081830303815290604052816003815181106144aa576144aa618d5d565b602002602001018190525060006144c0826153ed565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506145519060408051808201825260008082526020918201528151808301909252845182528085019082015290615f3a565b6145665785604051602001613bbb9190618e39565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156145c0565b511590565b6147345782602001511561467c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613bfb565b8260c0015115614734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613bfb565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161474d57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806147a890618eca565b935060ff16815181106147bd576147bd618d5d565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161480e9190618ee9565b60405160208183030381529060405282828061482990618eca565b935060ff168151811061483e5761483e618d5d565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061488b90618eca565b935060ff16815181106148a0576148a0618d5d565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806148ed90618eca565b935060ff168151811061490257614902618d5d565b6020026020010181905250876020015182828061491e90618eca565b935060ff168151811061493357614933618d5d565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061498090618eca565b935060ff168151811061499557614995618d5d565b6020908102919091010152875182826149ad81618eca565b935060ff16815181106149c2576149c2618d5d565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280614a0f90618eca565b935060ff1681518110614a2457614a24618d5d565b6020026020010181905250614a3846615f9b565b8282614a4381618eca565b935060ff1681518110614a5857614a58618d5d565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280614aa590618eca565b935060ff1681518110614aba57614aba618d5d565b602002602001018190525086828280614ad290618eca565b935060ff1681518110614ae757614ae7618d5d565b6020908102919091010152855115614c0e5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614b3881618eca565b935060ff1681518110614b4d57614b4d618d5d565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614b9d90899060040161889a565b600060405180830381865afa158015614bba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614be291908101906189f7565b8282614bed81618eca565b935060ff1681518110614c0257614c02618d5d565b60200260200101819052505b846020015115614cde5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614c5781618eca565b935060ff1681518110614c6c57614c6c618d5d565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614cb990618eca565b935060ff1681518110614cce57614cce618d5d565b6020026020010181905250614ea5565b614d166145bb8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614da95760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614d5981618eca565b935060ff1681518110614d6e57614d6e618d5d565b60200260200101819052508460a00151604051602001614d8e9190618d8c565b604051602081830303815290604052828280614cb990618eca565b8460c00151158015614dec575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614dea90511590565b155b15614ea55760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614e3081618eca565b935060ff1681518110614e4557614e45618d5d565b6020026020010181905250614e598861603b565b604051602001614e699190618d8c565b604051602081830303815290604052828280614e8490618eca565b935060ff1681518110614e9957614e99618d5d565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614ed990511590565b614f6e5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614f1c81618eca565b935060ff1681518110614f3157614f31618d5d565b60200260200101819052508460400151828280614f4d90618eca565b935060ff1681518110614f6257614f62618d5d565b60200260200101819052505b60608501511561508f5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614fb781618eca565b935060ff1681518110614fcc57614fcc618d5d565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561503b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261506391908101906189f7565b828261506e81618eca565b935060ff168151811061508357615083618d5d565b60200260200101819052505b60e085015151156151365760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826150d981618eca565b935060ff16815181106150ee576150ee618d5d565b602002602001018190525061510a8560e0015160000151615f9b565b828261511581618eca565b935060ff168151811061512a5761512a618d5d565b60200260200101819052505b60e085015160200151156151e05760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261518381618eca565b935060ff168151811061519857615198618d5d565b60200260200101819052506151b48560e0015160200151615f9b565b82826151bf81618eca565b935060ff16815181106151d4576151d4618d5d565b60200260200101819052505b60e0850151604001511561528a5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261522d81618eca565b935060ff168151811061524257615242618d5d565b602002602001018190525061525e8560e0015160400151615f9b565b828261526981618eca565b935060ff168151811061527e5761527e618d5d565b60200260200101819052505b60e085015160600151156153345760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826152d781618eca565b935060ff16815181106152ec576152ec618d5d565b60200260200101819052506153088560e0015160600151615f9b565b828261531381618eca565b935060ff168151811061532857615328618d5d565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615352576153526180a6565b60405190808252806020026020018201604052801561538557816020015b60608152602001906001900390816153705790505b50905060005b8260ff168160ff1610156153de57838160ff16815181106153ae576153ae618d5d565b6020026020010151828260ff16815181106153cb576153cb618d5d565b602090810291909101015260010161538b565b5093505050505b949350505050565b6154146040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161549a91869101618f54565b600060405180830381865afa1580156154b7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154df91908101906189f7565b905060006154ed8683616b2a565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161551d9190617e81565b6000604051808303816000875af115801561553c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526155649190810190618f9b565b805190915060030b1580159061557d5750602081015151155b801561558c5750604081015151155b1561456657816000815181106155a4576155a4618d5d565b6020026020010151604051602001613bbb9190619051565b606060006155f18560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506156289082905b90616c7f565b156157855760006156a58261569f8461569961566b8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616ca6565b90616d08565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615709908290616c7f565b1561577357604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615770905b8290616d8d565b90505b61577c81616db3565b92505050613ae8565b821561579e578484604051602001613bbb92919061923d565b5050604080516020810190915260008152613ae8565b509392505050565b6000808251602084016000f09392505050565b8160a00151156157de57505050565b60006157eb848484616e1c565b905060006157f8826153ed565b602081015181519192509060030b1580156158945750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261589490604080518082018252600080825260209182015281518083019092528451825280850190820152615622565b156158a157505050505050565b604082015151156158c1578160400151604051602001613bbb91906192e4565b80604051602001613bbb9190619342565b606060006159078360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061596c905b8290615f3a565b156159db57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613ae8906159d69083906173b7565b616db3565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a3d905b8290617441565b600103615b0a57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615aa390615769565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613ae8906159d6905b8390616d8d565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615b6990615965565b15615ca057604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615bd19083906174db565b905060008160018351615be491906185ef565b81518110615bf457615bf4618d5d565b60200260200101519050615c976159d6615c6a6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906173b7565b95945050505050565b82604051602001613bbb91906193ad565b50919050565b60606000615cec8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615d4e90615965565b15615d5c57613ae881616db3565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615dbb90615a36565b600103615e2557604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613ae8906159d690615b03565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615e8490615965565b15615ca057604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615eec9083906174db565b9050600181511115615f28578060028251615f0791906185ef565b81518110615f1757615f17618d5d565b602002602001015192505050919050565b5082604051602001613bbb91906193ad565b805182516000911115615f4f575060006139ef565b81518351602085015160009291615f659161948b565b615f6f91906185ef565b905082602001518103615f865760019150506139ef565b82516020840151819020912014905092915050565b60606000615fa883617580565b600101905060008167ffffffffffffffff811115615fc857615fc86180a6565b6040519080825280601f01601f191660200182016040528015615ff2576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084615ffc57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916160c7905b8290617662565b1561610757505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616166906160c0565b156161a657505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616205906160c0565b1561624557505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162a4906160c0565b806163095750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616309906160c0565b1561634957505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163a8906160c0565b8061640d5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261640d906160c0565b1561644d57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164ac906160c0565b806165115750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616511906160c0565b1561655157505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165b0906160c0565b806166155750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616615906160c0565b1561665557505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166b4906160c0565b156166f457505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616753906160c0565b1561679357505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526167f2906160c0565b1561683257505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616891906160c0565b156168d157505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616930906160c0565b1561697057505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169cf906160c0565b80616a345750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a34906160c0565b15616a7457505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ad3906160c0565b15616b1357505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613bbb929060200161949e565b60608060005b8451811015616bb55781858281518110616b4c57616b4c618d5d565b6020026020010151604051602001616b659291906188d6565b604051602081830303815290604052915060018551616b8491906185ef565b8114616bad5781604051602001616b9b9190619607565b60405160208183030381529060405291505b600101616b30565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616bce5790505090508381600081518110616bf957616bf9618d5d565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616c4d57616c4d618d5d565b60200260200101819052508181600281518110616c6c57616c6c618d5d565b6020908102919091010152949350505050565b6020808301518351835192840151600093616c9d9291849190617676565b14159392505050565b60408051808201909152600080825260208201526000616cd88460000151856020015185600001518660200151617787565b9050836020015181616cea91906185ef565b84518590616cf99083906185ef565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616d2d5750816139ef565b6020808301519084015160019114616d545750815160208481015190840151829020919020145b8015616d8557825184518590616d6b9083906185ef565b9052508251602085018051616d8190839061948b565b9052505b509192915050565b6040805180820190915260008082526020820152616dac8383836178a7565b5092915050565b60606000826000015167ffffffffffffffff811115616dd457616dd46180a6565b6040519080825280601f01601f191660200182016040528015616dfe576020820181803683370190505b5090506000602082019050616dac8185602001518660000151617952565b60606000616e28613de5565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616e4557905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616ea090618eca565b935060ff1681518110616eb557616eb5618d5d565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616f069190619648565b604051602081830303815290604052828280616f2190618eca565b935060ff1681518110616f3657616f36618d5d565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616f8390618eca565b935060ff1681518110616f9857616f98618d5d565b602002602001018190525082604051602001616fb49190618df8565b604051602081830303815290604052828280616fcf90618eca565b935060ff1681518110616fe457616fe4618d5d565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061703190618eca565b935060ff168151811061704657617046618d5d565b602002602001018190525061705b87846179cc565b828261706681618eca565b935060ff168151811061707b5761707b618d5d565b6020908102919091010152855151156171275760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826170cd81618eca565b935060ff16815181106170e2576170e2618d5d565b60200260200101819052506170fb8660000151846179cc565b828261710681618eca565b935060ff168151811061711b5761711b618d5d565b60200260200101819052505b8560800151156171955760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261717081618eca565b935060ff168151811061718557617185618d5d565b60200260200101819052506171fb565b84156171fb5760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826171da81618eca565b935060ff16815181106171ef576171ef618d5d565b60200260200101819052505b604086015151156172975760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261724581618eca565b935060ff168151811061725a5761725a618d5d565b6020026020010181905250856040015182828061727690618eca565b935060ff168151811061728b5761728b618d5d565b60200260200101819052505b8560600151156173015760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826172e081618eca565b935060ff16815181106172f5576172f5618d5d565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561731f5761731f6180a6565b60405190808252806020026020018201604052801561735257816020015b606081526020019060019003908161733d5790505b50905060005b8260ff168160ff1610156173ab57838160ff168151811061737b5761737b618d5d565b6020026020010151828260ff168151811061739857617398618d5d565b6020908102919091010152600101617358565b50979650505050505050565b60408051808201909152600080825260208201528151835110156173dc5750816139ef565b815183516020850151600092916173f29161948b565b6173fc91906185ef565b6020840151909150600190821461741d575082516020840151819020908220145b8015617438578351855186906174349083906185ef565b9052505b50929392505050565b60008082600001516174658560000151866020015186600001518760200151617787565b61746f919061948b565b90505b83516020850151617483919061948b565b8111616dac57816174938161968d565b92505082600001516174ca8560200151836174ae91906185ef565b86516174ba91906185ef565b8386600001518760200151617787565b6174d4919061948b565b9050617472565b606060006174e98484617441565b6174f490600161948b565b67ffffffffffffffff81111561750c5761750c6180a6565b60405190808252806020026020018201604052801561753f57816020015b606081526020019060019003908161752a5790505b50905060005b81518110156157b45761755b6159d68686616d8d565b82828151811061756d5761756d618d5d565b6020908102919091010152600101617545565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106175c9577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106175f5576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061761357662386f26fc10000830492506010015b6305f5e100831061762b576305f5e100830492506008015b612710831061763f57612710830492506004015b60648310617651576064830492506002015b600a83106139ef5760010192915050565b600061766e8383617a0c565b159392505050565b60008085841161777d576020841161772957600084156176c157600161769d8660206185ef565b6176a89060086196a7565b6176b39060026197a5565b6176bd91906185ef565b1990505b83518116856176d0898961948b565b6176da91906185ef565b805190935082165b818114617714578784116176fc57879450505050506153e5565b83617706816197b1565b9450508284511690506176e2565b61771e878561948b565b9450505050506153e5565b83832061773685886185ef565b617740908761948b565b91505b85821061777b578482208082036177685761775e868461948b565b93505050506153e5565b6177736001846185ef565b925050617743565b505b5092949350505050565b60008381868511617892576020851161784157600085156177d35760016177af8760206185ef565b6177ba9060086196a7565b6177c59060026197a5565b6177cf91906185ef565b1990505b845181166000876177e48b8b61948b565b6177ee91906185ef565b855190915083165b8281146178335781861061781b5761780e8b8b61948b565b96505050505050506153e5565b856178258161968d565b9650508386511690506177f6565b8596505050505050506153e5565b508383206000905b61785386896185ef565b82116178905785832080820361786f57839450505050506153e5565b61787a60018561948b565b93505081806178889061968d565b925050617849565b505b61789c878761948b565b979650505050505050565b604080518082019091526000808252602082015260006178d98560000151866020015186600001518760200151617787565b6020808701805191860191909152519091506178f590826185ef565b835284516020860151617908919061948b565b81036179175760008552617949565b83518351617925919061948b565b855186906179349083906185ef565b9052508351617943908261948b565b60208601525b50909392505050565b6020811061798a578151835261796960208461948b565b925061797660208361948b565b91506179836020826185ef565b9050617952565b60001981156179b95760016179a08360206185ef565b6179ac906101006197a5565b6179b691906185ef565b90505b9151835183169219169190911790915250565b606060006179da8484613eb8565b80516020808301516040519394506179f4939091016197c8565b60405160208183030381529060405291505092915050565b8151815160009190811115617a1f575081515b6020808501519084015160005b83811015617ad85782518251808214617aa8576000196020871015617a8757600184617a598960206185ef565b617a63919061948b565b617a6e9060086196a7565b617a799060026197a5565b617a8391906185ef565b1990505b8181168382168181039114617aa55797506139ef9650505050505050565b50505b617ab360208661948b565b9450617ac060208561948b565b93505050602081617ad1919061948b565b9050617a2c565b50845186516145669190619820565b610c9f8061984183390190565b610ec28061a4e083390190565b610aa98061b3a283390190565b610b3f8061be4b83390190565b6120728061c98a83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001617b6b617b70565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001617b6b6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617c225783516001600160a01b0316835260209384019390920191600101617bfb565b509095945050505050565b60005b83811015617c48578181015183820152602001617c30565b50506000910152565b60008151808452617c69816020860160208601617c2d565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d79577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617d5f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617d49848651617c51565b6020958601959094509290920191600101617d0f565b509197505050602094850194929092019150600101617ca5565b50929695505050505050565b600081518084526020840193506020830160005b82811015617dd95781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617d99565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d79577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617e4f6040880182617c51565b9050602082015191508681036020880152617e6a8183617d85565b965050506020938401939190910190600101617e0b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d79577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617ee3858351617c51565b94506020938401939190910190600101617ea9565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d79577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617f796040870182617d85565b9550506020938401939190910190600101617f20565b600060208284031215617fa157600080fd5b81518015158114613ae857600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff881660408301528660608301526003861061806b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261808c60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c908216806180e957607f821691505b602082108103615cb1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f82111561816c57806000526020600020601f840160051c810160208510156181495750805b601f840160051c820191505b818110156181695760008155600101618155565b50505b505050565b815167ffffffffffffffff81111561818b5761818b6180a6565b61819f8161819984546180d5565b84618122565b6020601f8211600181146181d357600083156181bb5750848201515b600019600385901b1c1916600184901b178455618169565b600084815260208120601f198516915b8281101561820357878501518255602094850194600190920191016181e3565b50848210156182215786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561824257600080fd5b5051919050565b60608152600061825c6060830186617c51565b602083019490945250901515604090910152919050565b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a06060850152600081546182bd816180d5565b8060a088015260018216600081146182dc57600181146183165761834a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b890101935061834a565b84600052602060002060005b838110156183415781548a820160c00152600190910190602001618322565b890160c0019450505b50505060038401546080860152809250505092915050565b60e08152600061837560e0830189617c51565b62ffffff881660208401526001600160a01b038716604084015282810360608401526183a18187617c51565b85546080850152600186015460ff16151560a085015290505b82810360c08401526183cc8185618273565b9998505050505050505050565b6001600160a01b0384168152826020820152606060408201526000615c976060830184617c51565b60c08152600061841460c0830189617c51565b8760208401526001600160a01b0387166040840152828103606084015261843b8187617c51565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a06040820152600061847e60a0830186617c51565b6060830194909452509015156080909101529392505050565b8281526040602082015260006153e56040830184617c51565b6001600160a01b03831681526040602082015260006153e56040830184617c51565b6040516060810167ffffffffffffffff811182821017156184f5576184f56180a6565b60405290565b60008067ffffffffffffffff841115618516576185166180a6565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715618545576185456180a6565b60405283815290508082840185101561855d57600080fd5b6157b4846020830185617c2d565b600082601f83011261857c57600080fd5b613ae8838351602085016184fb565b60006020828403121561859d57600080fd5b815167ffffffffffffffff8111156185b457600080fd5b6139eb8482850161856b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156139ef576139ef6185c0565b6101208152600061861761012083018b617c51565b6001600160a01b038a16602084015288604084015287606084015286608084015282810360a084015261864a8187617c51565b855160c08501526020860151151560e08501529050828103610100840152613cdb8185618273565b60e08152600061868560e0830189617c51565b8760208401526001600160a01b038716604084015282810360608401526186ac8187617c51565b855160808501526020860151151560a085015290506183ba565b60a0815260006186d960a0830187617c51565b82810360208401526186eb8187617c51565b855160408501526020860151151560608501529050828103608084015261789c8185618273565b60c08152600061872560c0830188617c51565b6001600160a01b038716602084015282810360408401526187468187617c51565b8551606085015260208601511515608085015290505b82810360a084015261876e8185618273565b98975050505050505050565b60c08152600061878d60c0830188617c51565b6001600160a01b038716602084015282810360408401526187ae8187617c51565b85546060850152600186015460ff1615156080850152905061875c565b60a0815260006187de60a0830188617c51565b6001600160a01b038716602084015282810360408401526187ff8187617c51565b606084019590955250509015156080909101529392505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161885181601a850160208801617c2d565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161888e81601c840160208801617c2d565b01601c01949350505050565b602081526000613ae86020830184617c51565b6000602082840312156188bf57600080fd5b81516001600160a01b0381168114613ae857600080fd5b600083516188e8818460208801617c2d565b8351908301906188fc818360208801617c2d565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161893d81601a850160208801617c2d565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161897a816033840160208801617c2d565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000613ae86080830184617c51565b600060208284031215618a0957600080fd5b815167ffffffffffffffff811115618a2057600080fd5b8201601f81018413618a3157600080fd5b6139eb848251602084016184fb565b60008551618a52818460208a01617c2d565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551618a8c816001840160208a01617c2d565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618aca816002840160208901617c2d565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618b0c816002840160208801617c2d565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618b576040830184617c51565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618bce81601f850160208701617c2d565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618c3b6040830184617c51565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000618c8d6040830184617c51565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618d04816014850160208701617c2d565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000618d4b6040830185617c51565b8281036020840152613ae48185617c51565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618dc4816001850160208701617c2d565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618e0a818460208701617c2d565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618ebd81604b850160208701617c2d565b91909101604b0192915050565b600060ff821660ff8103618ee057618ee06185c0565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618f47816029850160208701617c2d565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000613ae86080830184617c51565b600060208284031215618fad57600080fd5b815167ffffffffffffffff811115618fc457600080fd5b820160608185031215618fd657600080fd5b618fde6184d2565b81518060030b8114618fef57600080fd5b8152602082015167ffffffffffffffff81111561900b57600080fd5b6190178682850161856b565b602083015250604082015167ffffffffffffffff81111561903757600080fd5b6190438682850161856b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f22000000000000000000000000000000000000000000000000000000000000006020820152600082516190af816021850160208701617c2d565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161929b816021850160208801617c2d565b7f2720696e206f75747075743a200000000000000000000000000000000000000060219184019182015283516192d881602e840160208801617c2d565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618f47816029850160208701617c2d565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a0000000000000000000000000000000000000000000000000000000000006020820152600082516193a0816022850160208701617c2d565b9190910160220192915050565b7f436f6e7472616374206e616d65200000000000000000000000000000000000008152600082516193e581600e850160208701617c2d565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b808201808211156139ef576139ef6185c0565b7f53504458206c6963656e7365206964656e7469666965722000000000000000008152600083516194d6816018850160208801617c2d565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161951381601c840160208801617c2d565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b60008251619619818460208701617c2d565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161968081601c850160208701617c2d565b91909101601c0192915050565b600060001982036196a0576196a06185c0565b5060010190565b80820281158282048414176139ef576139ef6185c0565b6001815b60018411156196f9578085048111156196dd576196dd6185c0565b60018416156196eb57908102905b60019390931c9280026196c2565b935093915050565b600082619710575060016139ef565b8161971d575060006139ef565b8160018114619733576002811461973d57619759565b60019150506139ef565b60ff84111561974e5761974e6185c0565b50506001821b6139ef565b5060208310610133831016604e8410600b841016171561977c575081810a6139ef565b61978960001984846196be565b806000190482111561979d5761979d6185c0565b029392505050565b6000613ae88383619701565b6000816197c0576197c06185c0565b506000190190565b600083516197da818460208801617c2d565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619814816001840160208801617c2d565b01600101949350505050565b8181036000831280158383131683831282161715616dac57616dac6185c056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610e9e806100246000396000f3fe60806040526004361061006e5760003560e01c8063c51316911161004b578063c5131691146100d5578063c9028a36146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a214610077578063676cc054146100975780636ed70169146100c057005b3661007557005b005b34801561008357600080fd5b506100756100923660046106ec565b610148565b6100aa6100a5366004610728565b6101de565b6040516100b79190610823565b60405180910390f35b3480156100cc57600080fd5b50610075610222565b3480156100e157600080fd5b506100756100f03660046106ec565b610257565b34801561010157600080fd5b50610075610110366004610836565b610332565b610075610123366004610996565b61036e565b34801561013457600080fd5b50610075610143366004610a82565b6103b2565b6101506103e7565b61017273ffffffffffffffffffffffffffffffffffffffff831633838661042a565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a1506040805160208101909152600081525b9392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61025f6103e7565b600061026c600285610b6c565b9050806000036102a8576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102ca73ffffffffffffffffffffffffffffffffffffffff841633848461042a565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f689a5a5cb55e795ffe4cd8b419cd3bb0a3373974c54d25f64e734d7388b93e9b3382604051610363929190610bf0565b60405180910390a150565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa33348585856040516103a5959493929190610ce2565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103a59493929190610d6c565b600260005403610423576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104bf9085906104c5565b50505050565b60006104e773ffffffffffffffffffffffffffffffffffffffff841683610560565b9050805160001415801561050c57508080602001905181019061050a9190610e2f565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061021b83836000846000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105939190610e4c565b60006040518083038185875af1925050503d80600081146105d0576040519150601f19603f3d011682016040523d82523d6000602084013e6105d5565b606091505b50915091506105e58683836105ef565b9695505050505050565b606082610604576105ff8261067e565b61021b565b8151158015610628575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610677576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610557565b508061021b565b80511561068e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106e757600080fd5b919050565b60008060006060848603121561070157600080fd5b83359250610711602085016106c3565b915061071f604085016106c3565b90509250925092565b6000806000838503604081121561073e57600080fd5b602081121561074c57600080fd5b50839250602084013567ffffffffffffffff81111561076a57600080fd5b8401601f8101861361077b57600080fd5b803567ffffffffffffffff81111561079257600080fd5b8660208284010111156107a457600080fd5b939660209190910195509293505050565b60005b838110156107d05781810151838201526020016107b8565b50506000910152565b600081518084526107f18160208601602086016107b5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061021b60208301846107d9565b60006020828403121561084857600080fd5b813567ffffffffffffffff81111561085f57600080fd5b82016080818503121561021b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156108e7576108e7610871565b604052919050565b600082601f83011261090057600080fd5b813567ffffffffffffffff81111561091a5761091a610871565b61094b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108a0565b81815284602083860101111561096057600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106c057600080fd5b80356106e78161097d565b6000806000606084860312156109ab57600080fd5b833567ffffffffffffffff8111156109c257600080fd5b6109ce868287016108ef565b9350506020840135915060408401356109e68161097d565b809150509250925092565b600067ffffffffffffffff821115610a0b57610a0b610871565b5060051b60200190565b600082601f830112610a2657600080fd5b8135610a39610a34826109f1565b6108a0565b8082825260208201915060208360051b860101925085831115610a5b57600080fd5b602085015b83811015610a78578035835260209283019201610a60565b5095945050505050565b600080600060608486031215610a9757600080fd5b833567ffffffffffffffff811115610aae57600080fd5b8401601f81018613610abf57600080fd5b8035610acd610a34826109f1565b8082825260208201915060208360051b850101925088831115610aef57600080fd5b602084015b83811015610b3157803567ffffffffffffffff811115610b1357600080fd5b610b228b6020838901016108ef565b84525060209283019201610af4565b509550505050602084013567ffffffffffffffff811115610b5157600080fd5b610b5d86828701610a15565b92505061071f6040850161098b565b600082610ba2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2e836106c3565b16604082015273ffffffffffffffffffffffffffffffffffffffff610c55602084016106c3565b166060820152600080604084013590508060808401525060608301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610ca157600080fd5b830160208101903567ffffffffffffffff811115610cbe57600080fd5b803603821315610ccd57600080fd5b608060a08501526105e560c085018284610ba7565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d1760a08301866107d9565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610d62578151865260209586019590910190600101610d44565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610dff577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610dea8583516107d9565b94506020938401939190910190600101610db0565b505050508281036040840152610e158186610d30565b915050610e26606083018415159052565b95945050505050565b600060208284031215610e4157600080fd5b815161021b8161097d565b60008251610e5e8184602087016107b5565b919091019291505056fea26469706673582212200121b4788f0b35a4b6df21db4f43708a9b20e8b16f616e6f3300230e75bbdd1364736f6c634300081a00336080604052348015600f57600080fd5b50604051610aa9380380610aa9833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b610a1c8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b610059610054366004610658565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b23660046106f8565b61032a565b60008383836040516024016100ce939291906107f4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b3911661017589600261081e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610209919061085e565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a081018252610321808252600160208084018290528385019290925283518083018552600080825260608501919091526080840181905284518086018652918252918101829052905492517f7b15118b0000000000000000000000000000000000000000000000000000000081529192909173ffffffffffffffffffffffffffffffffffffffff90911690637b15118b906102ed908c908c908c90899088908a906004016108f7565b600060405180830381600087803b15801561030757600080fd5b505af115801561031b573d6000803e3d6000fd5b50505050505050505050505050565b6000838383604051602401610341939291906107f4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a081018352610321808252600182840181905282850191909152835180840185526000808252606084019190915260808301819052845180860186528281529384018190525493517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9485166004820152602481019190915293945092909188169063095ea7b3906044016020604051808303816000875af115801561047c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a0919061085e565b506000546040517f06cb898300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906306cb8983906104ff908b908b90889087908990600401610972565b600060405180830381600087803b15801561051957600080fd5b505af115801561052d573d6000803e3d6000fd5b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261057b57600080fd5b81356020830160008067ffffffffffffffff84111561059c5761059c61053b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156105e9576105e961053b565b60405283815290508082840187101561060157600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461064257600080fd5b919050565b801515811461065557600080fd5b50565b60008060008060008060c0878903121561067157600080fd5b863567ffffffffffffffff81111561068857600080fd5b61069489828a0161056a565b965050602087013594506106aa6040880161061e565b9350606087013567ffffffffffffffff8111156106c657600080fd5b6106d289828a0161056a565b9350506080870135915060a08701356106ea81610647565b809150509295509295509295565b600080600080600060a0868803121561071057600080fd5b853567ffffffffffffffff81111561072757600080fd5b6107338882890161056a565b9550506107426020870161061e565b9350604086013567ffffffffffffffff81111561075e57600080fd5b61076a8882890161056a565b93505060608601359150608086013561078281610647565b809150509295509295909350565b6000815180845260005b818110156107b65760208185018101518683018201520161079a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006108076060830186610790565b602083019490945250901515604090910152919050565b80820180821115610858577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561087057600080fd5b815161087b81610647565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a060608501526108e360a0850182610790565b608093840151949093019390935250919050565b60e08152600061090a60e0830189610790565b87602084015273ffffffffffffffffffffffffffffffffffffffff87166040840152828103606084015261093e8187610790565b855160808501526020860151151560a0850152905082810360c08401526109658185610882565b9998505050505050505050565b60c08152600061098560c0830188610790565b73ffffffffffffffffffffffffffffffffffffffff8716602084015282810360408401526109b38187610790565b85516060850152602086015115156080850152905082810360a08401526109da8185610882565b9897505050505050505056fea2646970667358221220d537d7a8149cdb3025211768bab067e858b4bd38e69fcb1bfba3dec8b144f23764736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea26469706673582212201600a256a4ffaaa4ceb3b81d9f67be9d8f33665245b35eeba52fdc70200176a764736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a2646970667358221220f677da5acb0fa168e97c3dc95f7b663413f2b4b28d636b2b7186d143b26cf01464736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromSenderZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiverEVMFromZEVM\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"callOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structCallOptions\",\"components\":[{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"isArbitraryCall\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedOnCall\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"zrc20\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasfee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"protocolFlatFee\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"callOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structCallOptions\",\"components\":[{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"isArbitraryCall\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerIsNotProtocol\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedZetaSent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasFeeTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZRC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientZetaAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MessageSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyWZETAOrProtocol\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20BurnFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZRC20TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x600c8054600160ff199182168117909255601f8054909116909117905560a06040526000608052602880546001600160a01b0319169055348015604157600080fd5b5061eadb806100516000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806385226c81116100b2578063b5508aa911610081578063d7a525fc11610066578063d7a525fc146101ec578063e20c9f71146101f4578063fa7626d4146101fc57600080fd5b8063b5508aa9146101cc578063ba414fa6146101d457600080fd5b806385226c8114610192578063916a17c6146101a75780639683c695146101bc578063b0464fdc146101c457600080fd5b80633f7286f4116100ee5780633f7286f414610165578063524744131461016d57806366d9a9a0146101755780636ff15ccc1461018a57600080fd5b80630a9254e4146101205780631ed7831c1461012a5780632ade3880146101485780633e5e3c231461015d575b600080fd5b610128610209565b005b6101326112fe565b60405161013f9190617bf1565b60405180910390f35b610150611360565b60405161013f9190617c8d565b6101326114a2565b610132611502565b610128611562565b61017d611dea565b60405161013f9190617df3565b610128611f6c565b61019a6127b9565b60405161013f9190617e91565b6101af612889565b60405161013f9190617f08565b610128612984565b6101af612faa565b61019a6130a5565b6101dc613175565b604051901515815260200161013f565b610128613249565b610132613986565b601f546101dc9060ff1681565b602580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602680548216611234179055602780548216615678179055602e805490911661432117905560405161026790617af7565b60408082526004908201527f746573740000000000000000000000000000000000000000000000000000000060608201526080602082018190526003908201527f54544b000000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156102ec573d6000803e3d6000fd5b50602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905560405161033190617af7565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156103b5573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c0000000000000000000000000000000000006020820152602754602554925190851660248201526044810193909352921660648201526000916104a7916084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526139e6565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0384811682029290921792839055604080518082018252601081527f4552433230437573746f64792e736f6c000000000000000000000000000000006020820152602754602554925193909504841660248401529383166044830152909116606482015291925061054a9160840161044a565b602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091178255604080518082018252601a81527f5a657461436f6e6e6563746f724e6f6e4e61746976652e736f6c00000000000093810193909352601f546023546027546025549351610100909304851660248401529084166044830152831660648201529116608482015291925061064e9160a40160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff8c8765e000000000000000000000000000000000000000000000000000000001790526139e6565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091179091556027546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561070057600080fd5b505af1158015610714573d6000803e3d6000fd5b50506025546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506306447d569150602401600060405180830381600087803b15801561078a57600080fd5b505af115801561079e573d6000803e3d6000fd5b5050601f546020546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f9150602401600060405180830381600087803b15801561080957600080fd5b505af115801561081d573d6000803e3d6000fd5b5050601f546021546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef9150602401600060405180830381600087803b15801561088857600080fd5b505af115801561089c573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156108fe57600080fd5b505af1158015610912573d6000803e3d6000fd5b50506022546025546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506340c10f199150604401600060405180830381600087803b15801561098157600080fd5b505af1158015610995573d6000803e3d6000fd5b50506022546020546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526207a12060248201529116925063a9059cbb91506044016020604051808303816000875af1158015610a09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2d9190617f9f565b50604051610a3a90617b04565b604051809103906000f080158015610a56573d6000803e3d6000fd5b50602480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316178155604080518082018252600f81527f476174657761795a45564d2e736f6c00000000000000000000000000000000006020820152602354602e5492519085169381019390935292166044820152610b3c919060640160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f485cc955000000000000000000000000000000000000000000000000000000001790526139e6565b602980546001600160a01b03929092167fffffffffffffffffffffffff00000000000000000000000000000000000000009283168117909155602a80549092168117909155604051610b8d90617b11565b6001600160a01b039091168152602001604051809103906000f080158015610bb9573d6000803e3d6000fd5b50602b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556040517f06447d5600000000000000000000000000000000000000000000000000000000815273735b14bb79463307aacbed86daf3322b1e6226ab6004820181905290737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b158015610c6e57600080fd5b505af1158015610c82573d6000803e3d6000fd5b505050506000806000604051610c9790617b1e565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f080158015610cd3573d6000803e3d6000fd5b50602c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602a54604051601293600193600093849391921690610d2990617b2b565b610d3896959493929190617fc1565b604051809103906000f080158015610d54573d6000803e3d6000fd5b50602d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155602c546040517fee2815ba0000000000000000000000000000000000000000000000000000000081526001600482015260248101929092529091169063ee2815ba90604401600060405180830381600087803b158015610deb57600080fd5b505af1158015610dff573d6000803e3d6000fd5b5050602c546040517fa7cb050700000000000000000000000000000000000000000000000000000000815260016004820181905260248201526001600160a01b03909116925063a7cb05079150604401600060405180830381600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b5050602d54602e546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f42406024820152911692506347e7ef2491506044016020604051808303816000875af1158015610ef1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f159190617f9f565b50602d54602b546040517f47e7ef240000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116906347e7ef24906044016020604051808303816000875af1158015610f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faa9190617f9f565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561100957600080fd5b505af115801561101d573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561109357600080fd5b505af11580156110a7573d6000803e3d6000fd5b5050602d54602a546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152620f424060248201529116925063095ea7b391506044016020604051808303816000875af115801561111b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113f9190617f9f565b506027546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156111c057600080fd5b505af11580156111d4573d6000803e3d6000fd5b5050604080518082018252600180825260006020928301819052602f829055603080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055835160a08101855261032180825281850193845281860190815285519485019095528184526060810184905260808101919091528051603180549351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff0000000000000000000000000000000000000000009094166001600160a01b0392831617939093178355935160328054919095167fffffffffffffffffffffffff000000000000000000000000000000000000000091909116179093559193509091506033906112ec9082618181565b50608082015181600301559050505050565b6060601680548060200260200160405190810160405280929190818152602001828054801561135657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611338575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561149957600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156114825783829060005260206000200180546113f5906180e5565b80601f0160208091040260200160405190810160405280929190818152602001828054611421906180e5565b801561146e5780601f106114435761010080835404028352916020019161146e565b820191906000526020600020905b81548152906001019060200180831161145157829003601f168201915b5050505050815260200190600101906113d6565b505050508152505081526020019060010190611384565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015611356576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611338575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015611356576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611338575050505050905090565b604080518082018252600681527f48656c6c6f2100000000000000000000000000000000000000000000000000006020820152602d54602b5492517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0393841660048201529192602a92600192670de0b6b3a7640000926000929116906370a0823190602401602060405180830381865afa15801561160e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116329190618240565b6040519091506000907fe04d4f97000000000000000000000000000000000000000000000000000000009061166f90889088908890602401618259565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093526024549051919350600092611708926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602d5461173f926207a120916001600160a01b0316908690602f90603190602401618372565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7b15118b00000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916117fc916001600160a01b03919091169060009086906004016183e9565b600060405180830381600087803b15801561181657600080fd5b505af115801561182a573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156118a057600080fd5b505af11580156118b4573d6000803e3d6000fd5b5050602b5460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250630abd8905915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261194e926207a120916001600160a01b0316908d908d908d90600401618411565b600060405180830381600087803b15801561196857600080fd5b505af115801561197c573d6000803e3d6000fd5b5050601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101879052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b1580156119fd57600080fd5b505af1158015611a11573d6000803e3d6000fd5b5050602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611aa457600080fd5b505af1158015611ab8573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b031685898989604051611b08959493929190618466565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611ba257600080fd5b505af1158015611bb6573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150611bfb90879086906184a7565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611c7557600080fd5b505af1158015611c89573d6000803e3d6000fd5b5050601f546024546040517f38e225270000000000000000000000000000000000000000000000000000000081526001600160a01b03610100909304831694506338e2252793508892611ce69260289291169088906004016184c0565b60006040518083038185885af1158015611d04573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611d2d91908101906185ab565b50602d54602b546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbc9190618240565b9050611de0816001611dd16207a1208861860f565b611ddb919061860f565b613a05565b5050505050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156114995783829060005260206000209060020201604051806040016040529081600082018054611e41906180e5565b80601f0160208091040260200160405190810160405280929190818152602001828054611e6d906180e5565b8015611eba5780601f10611e8f57610100808354040283529160200191611eba565b820191906000526020600020905b815481529060010190602001808311611e9d57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611f5457602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f015790505b50505050508152505081526020019060010190611e0e565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090611fe890879087908790602401618259565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602a5491517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482018190526001600160a01b039093166084820152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156120da57600080fd5b505af11580156120ee573d6000803e3d6000fd5b5050602e5460245460405160609190911b6bffffffffffffffffffffffff19166020820152600093506001600160a01b0390911691507f07bf64173efd8f3dfb9e4eb3834bab9d5b85a3d89a1c6425797329de0668502c9060340160408051601f19818403018152828252602d547f4d8943bb000000000000000000000000000000000000000000000000000000008452915190926001600160a01b03909216916207a1209188918491634d8943bb916004808201926020929091908290030181865afa1580156121c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e79190618240565b60408051808201825260018082526020820152905161220f9695949392918c91603190618622565b60405180910390a3602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561228957600080fd5b505af115801561229d573d6000803e3d6000fd5b5050602a546024546040805160609290921b6bffffffffffffffffffffffff1916602083015280518083036014018152602d5460748401835260016034850181815260549095015291517f7b15118b0000000000000000000000000000000000000000000000000000000081526001600160a01b039485169650637b15118b955061233b9491936207a1209392909216918991603190600401618692565b600060405180830381600087803b15801561235557600080fd5b505af1158015612369573d6000803e3d6000fd5b5050602d54602e546040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156123d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f99190618240565b905061240c81611ddb846207a12061860f565b601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b15801561248957600080fd5b505af115801561249d573d6000803e3d6000fd5b5050602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561253057600080fd5b505af1158015612544573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b031685898989604051612594959493929190618466565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561262e57600080fd5b505af1158015612642573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f915061268790879087906184a7565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561270157600080fd5b505af1158015612715573d6000803e3d6000fd5b5050601f546024546040517f38e225270000000000000000000000000000000000000000000000000000000081526001600160a01b03610100909304831694506338e22527935088926127729260289291169089906004016184c0565b60006040518083038185885af1158015612790573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611de091908101906185ab565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156114995783829060005260206000200180546127fc906180e5565b80601f0160208091040260200160405190810160405280929190818152602001828054612828906180e5565b80156128755780601f1061284a57610100808354040283529160200191612875565b820191906000526020600020905b81548152906001019060200180831161285857829003601f168201915b5050505050815260200190600101906127dd565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156114995760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561296c57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116129195790505b505050505081525050815260200190600101906128ad565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f970000000000000000000000000000000000000000000000000000000090612a0090879087908790602401618259565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009490941693909317909252602e5491517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612ad357600080fd5b505af1158015612ae7573d6000803e3d6000fd5b5050602a546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612b7957600080fd5b505af1158015612b8d573d6000803e3d6000fd5b5050602d54602e5460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039283169450911691507f306ee13f48319a123b222c69908e44dcf91abffc20cacc502e3cf5a4ff23e0e49060340160408051601f198184030181528282018252600180845260208401529051612c179287916031906186e6565b60405180910390a3602a5460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b03909116906306cb89839060340160408051601f19818403018152602d5483830183526001808552602085015291517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b168152612cbe9391926001600160a01b0316918791603190600401618732565b600060405180830381600087803b158015612cd857600080fd5b505af1158015612cec573d6000803e3d6000fd5b5050601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101859052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015612d6d57600080fd5b505af1158015612d81573d6000803e3d6000fd5b5050601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612e1757600080fd5b505af1158015612e2b573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f9150612e7090859085906184a7565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612eea57600080fd5b505af1158015612efe573d6000803e3d6000fd5b5050601f546024546040517f38e225270000000000000000000000000000000000000000000000000000000081526001600160a01b03610100909304831694506338e2252793508692612f5b9260289291169087906004016184c0565b60006040518083038185885af1158015612f79573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052612fa291908101906185ab565b505050505050565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156114995760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561308d57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161303a5790505b50505050508152505081526020019060010190612fce565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156114995783829060005260206000200180546130e8906180e5565b80601f0160208091040260200160405190810160405280929190818152602001828054613114906180e5565b80156131615780601f1061313657610100808354040283529160200191613161565b820191906000526020600020905b81548152906001019060200180831161314457829003601f168201915b5050505050815260200190600101906130c9565b60085460009060ff161561318d575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa15801561321e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132429190618240565b1415905090565b604080518082018252600681527f48656c6c6f21000000000000000000000000000000000000000000000000000060208201529051602a90600190670de0b6b3a7640000906000907fe04d4f9700000000000000000000000000000000000000000000000000000000906132c590879087908790602401618259565b60408051601f19818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090951694909417909352602454905191935060009261335e926001600160a01b03909216910160609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f1981840301815290829052602d54613392926001600160a01b03909116908590602f9060319060240161879a565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06cb898300000000000000000000000000000000000000000000000000000000179052602a5490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161344f916001600160a01b03919091169060009086906004016183e9565b600060405180830381600087803b15801561346957600080fd5b505af115801561347d573d6000803e3d6000fd5b5050602e546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156134f357600080fd5b505af1158015613507573d6000803e3d6000fd5b5050602b5460245460405160609190911b6bffffffffffffffffffffffff191660208201526001600160a01b039091169250637a34d8bb915060340160408051601f1981840301815290829052602d547fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16835261359e926001600160a01b03909116908b908b908b906004016187eb565b600060405180830381600087803b1580156135b857600080fd5b505af11580156135cc573d6000803e3d6000fd5b5050601f546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b0316600482015260248101869052737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b15801561364d57600080fd5b505af1158015613661573d6000803e3d6000fd5b5050602480546040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190529281018390526044810183905260648101929092526001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156136f457600080fd5b505af1158015613708573d6000803e3d6000fd5b505050507f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa601f60019054906101000a90046001600160a01b031684888888604051613758959493929190618466565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156137f257600080fd5b505af1158015613806573d6000803e3d6000fd5b50506024546040516001600160a01b0390911692507fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f915061384b90869086906184a7565b60405180910390a26027546040517fca669fa70000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156138c557600080fd5b505af11580156138d9573d6000803e3d6000fd5b5050601f546024546040517f38e225270000000000000000000000000000000000000000000000000000000081526001600160a01b03610100909304831694506338e22527935087926139369260289291169088906004016184c0565b60006040518083038185885af1158015613954573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261397d91908101906185ab565b50505050505050565b60606015805480602002602001604051908101604052809291908181526020018280548015611356576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611338575050505050905090565b60006139f0617b38565b6139fb848483613a84565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b158015613a7057600080fd5b505afa158015612fa2573d6000803e3d6000fd5b600080613a918584613aff565b9050613af46040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001613adf929190618839565b60405160208183030381529060405285613b0b565b9150505b9392505050565b6000613af88383613b39565b60c08101515160009015613b2f57613b2884848460c00151613b54565b9050613af8565b613b288484613cfa565b6000613b458383613de5565b613af883836020015184613b0b565b600080613b5f613df5565b90506000613b6d8683613ec8565b90506000613b84826060015183602001518561436e565b90506000613b9483838989614580565b90506000613ba1826153fd565b602081015181519192509060030b15613c1457898260400151604051602001613bcb92919061885b565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252613c0b916004016188dc565b60405180910390fd5b6000613c576040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016155cc565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90613caa9084906004016188dc565b602060405180830381865afa158015613cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ceb91906188ef565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590613d4f9087906004016188dc565b600060405180830381865afa158015613d6c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d9491908101906185ab565b90506000613dc28285604051602001613dae929190618918565b6040516020818303038152906040526157cc565b90506001600160a01b0381166139fb578484604051602001613bcb929190618947565b613df1828260006157df565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90613e7c9084906004016189f2565b600060405180830381865afa158015613e99573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613ec19190810190618a39565b9250505090565b613efa6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050613f456040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b613f4e856158e2565b60208201526000613f5e86615cc7565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015613fa0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613fc89190810190618a39565b86838560200151604051602001613fe29493929190618a82565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061403a9085906004016188dc565b600060405180830381865afa158015614057573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261407f9190810190618a39565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906140c7908490600401618b86565b602060405180830381865afa1580156140e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141089190617f9f565b61411d5781604051602001613bcb9190618bd8565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614162908490600401618c6a565b600060405180830381865afa15801561417f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526141a79190810190618a39565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906141ee908490600401618cbc565b602060405180830381865afa15801561420b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061422f9190617f9f565b156142c4576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890614279908490600401618cbc565b600060405180830381865afa158015614296573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526142be9190810190618a39565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016142e99190618d0e565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401614315929190618d7a565b600060405180830381865afa158015614332573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261435a9190810190618a39565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161438a5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106143ea576143ea618d9f565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061443e5761443e618d9f565b60200260200101819052508460405160200161445a9190618dce565b6040516020818303038152906040528160028151811061447c5761447c618d9f565b6020026020010181905250826040516020016144989190618e3a565b604051602081830303815290604052816003815181106144ba576144ba618d9f565b602002602001018190525060006144d0826153fd565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506145619060408051808201825260008082526020918201528151808301909252845182528085019082015290615f4a565b6145765785604051602001613bcb9190618e7b565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156145d0565b511590565b6147445782602001511561468c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401613c0b565b8260c0015115614744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401613c0b565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161475d57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806147b890618f0c565b935060ff16815181106147cd576147cd618d9f565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161481e9190618f2b565b60405160208183030381529060405282828061483990618f0c565b935060ff168151811061484e5761484e618d9f565b60200260200101819052506040518060400160405280600681526020017f6465706c6f79000000000000000000000000000000000000000000000000000081525082828061489b90618f0c565b935060ff16815181106148b0576148b0618d9f565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806148fd90618f0c565b935060ff168151811061491257614912618d9f565b6020026020010181905250876020015182828061492e90618f0c565b935060ff168151811061494357614943618d9f565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163745061746800000000000000000000000000000000000081525082828061499090618f0c565b935060ff16815181106149a5576149a5618d9f565b6020908102919091010152875182826149bd81618f0c565b935060ff16815181106149d2576149d2618d9f565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280614a1f90618f0c565b935060ff1681518110614a3457614a34618d9f565b6020026020010181905250614a4846615fab565b8282614a5381618f0c565b935060ff1681518110614a6857614a68618d9f565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280614ab590618f0c565b935060ff1681518110614aca57614aca618d9f565b602002602001018190525086828280614ae290618f0c565b935060ff1681518110614af757614af7618d9f565b6020908102919091010152855115614c1e5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282614b4881618f0c565b935060ff1681518110614b5d57614b5d618d9f565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90614bad9089906004016188dc565b600060405180830381865afa158015614bca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052614bf29190810190618a39565b8282614bfd81618f0c565b935060ff1681518110614c1257614c12618d9f565b60200260200101819052505b846020015115614cee5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282614c6781618f0c565b935060ff1681518110614c7c57614c7c618d9f565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280614cc990618f0c565b935060ff1681518110614cde57614cde618d9f565b6020026020010181905250614eb5565b614d266145cb8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b614db95760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614d6981618f0c565b935060ff1681518110614d7e57614d7e618d9f565b60200260200101819052508460a00151604051602001614d9e9190618dce565b604051602081830303815290604052828280614cc990618f0c565b8460c00151158015614dfc575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152614dfa90511590565b155b15614eb55760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282614e4081618f0c565b935060ff1681518110614e5557614e55618d9f565b6020026020010181905250614e698861604b565b604051602001614e799190618dce565b604051602081830303815290604052828280614e9490618f0c565b935060ff1681518110614ea957614ea9618d9f565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152614ee990511590565b614f7e5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282614f2c81618f0c565b935060ff1681518110614f4157614f41618d9f565b60200260200101819052508460400151828280614f5d90618f0c565b935060ff1681518110614f7257614f72618d9f565b60200260200101819052505b60608501511561509f5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282614fc781618f0c565b935060ff1681518110614fdc57614fdc618d9f565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa15801561504b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526150739190810190618a39565b828261507e81618f0c565b935060ff168151811061509357615093618d9f565b60200260200101819052505b60e085015151156151465760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826150e981618f0c565b935060ff16815181106150fe576150fe618d9f565b602002602001018190525061511a8560e0015160000151615fab565b828261512581618f0c565b935060ff168151811061513a5761513a618d9f565b60200260200101819052505b60e085015160200151156151f05760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261519381618f0c565b935060ff16815181106151a8576151a8618d9f565b60200260200101819052506151c48560e0015160200151615fab565b82826151cf81618f0c565b935060ff16815181106151e4576151e4618d9f565b60200260200101819052505b60e0850151604001511561529a5760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261523d81618f0c565b935060ff168151811061525257615252618d9f565b602002602001018190525061526e8560e0015160400151615fab565b828261527981618f0c565b935060ff168151811061528e5761528e618d9f565b60200260200101819052505b60e085015160600151156153445760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826152e781618f0c565b935060ff16815181106152fc576152fc618d9f565b60200260200101819052506153188560e0015160600151615fab565b828261532381618f0c565b935060ff168151811061533857615338618d9f565b60200260200101819052505b60008160ff1667ffffffffffffffff811115615362576153626180b6565b60405190808252806020026020018201604052801561539557816020015b60608152602001906001900390816153805790505b50905060005b8260ff168160ff1610156153ee57838160ff16815181106153be576153be618d9f565b6020026020010151828260ff16815181106153db576153db618d9f565b602090810291909101015260010161539b565b5093505050505b949350505050565b6154246040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916154aa91869101618f96565b600060405180830381865afa1580156154c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526154ef9190810190618a39565b905060006154fd8683616b3a565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161552d9190617e91565b6000604051808303816000875af115801561554c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526155749190810190618fdd565b805190915060030b1580159061558d5750602081015151155b801561559c5750604081015151155b1561457657816000815181106155b4576155b4618d9f565b6020026020010151604051602001613bcb9190619093565b606060006156018560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506156389082905b90616c8f565b156157955760006156b5826156af846156a961567b8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90616cb6565b90616d18565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615719908290616c8f565b1561578357604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615780905b8290616d9d565b90505b61578c81616dc3565b92505050613af8565b82156157ae578484604051602001613bcb92919061927f565b5050604080516020810190915260008152613af8565b509392505050565b6000808251602084016000f09392505050565b8160a00151156157ee57505050565b60006157fb848484616e2c565b90506000615808826153fd565b602081015181519192509060030b1580156158a45750604080518082018252600781527f5355434345535300000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526158a490604080518082018252600080825260209182015281518083019092528451825280850190820152615632565b156158b157505050505050565b604082015151156158d1578160400151604051602001613bcb9190619326565b80604051602001613bcb9190619384565b606060006159178360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061597c905b8290615f4a565b156159eb57604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613af8906159e69083906173c7565b616dc3565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a4d905b8290617451565b600103615b1a57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615ab390615779565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613af8906159e6905b8390616d9d565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615b7990615975565b15615cb057604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615be19083906174eb565b905060008160018351615bf4919061860f565b81518110615c0457615c04618d9f565b60200260200101519050615ca76159e6615c7a6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906173c7565b95945050505050565b82604051602001613bcb91906193ef565b50919050565b60606000615cfc8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615d5e90615975565b15615d6c57613af881616dc3565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615dcb90615a46565b600103615e3557604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152613af8906159e690615b13565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615e9490615975565b15615cb057604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290615efc9083906174eb565b9050600181511115615f38578060028251615f17919061860f565b81518110615f2757615f27618d9f565b602002602001015192505050919050565b5082604051602001613bcb91906193ef565b805182516000911115615f5f575060006139ff565b81518351602085015160009291615f75916194cd565b615f7f919061860f565b905082602001518103615f965760019150506139ff565b82516020840151819020912014905092915050565b60606000615fb883617590565b600101905060008167ffffffffffffffff811115615fd857615fd86180b6565b6040519080825280601f01601f191660200182016040528015616002576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461600c57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916160d7905b8290617672565b1561611757505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616176906160d0565b156161b657505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616215906160d0565b1561625557505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526162b4906160d0565b806163195750604080518082018252601081527f47504c2d322e302d6f722d6c617465720000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616319906160d0565b1561635957505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526163b8906160d0565b8061641d5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261641d906160d0565b1561645d57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526164bc906160d0565b806165215750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616521906160d0565b1561656157505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526165c0906160d0565b806166255750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616625906160d0565b1561666557505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526166c4906160d0565b1561670457505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616763906160d0565b156167a357505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616802906160d0565b1561684257505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526168a1906160d0565b156168e157505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616940906160d0565b1561698057505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526169df906160d0565b80616a445750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616a44906160d0565b15616a8457505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152616ae3906160d0565b15616b2357505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151613bcb92906020016194e0565b60608060005b8451811015616bc55781858281518110616b5c57616b5c618d9f565b6020026020010151604051602001616b75929190618918565b604051602081830303815290604052915060018551616b94919061860f565b8114616bbd5781604051602001616bab9190619649565b60405160208183030381529060405291505b600101616b40565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081616bde5790505090508381600081518110616c0957616c09618d9f565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110616c5d57616c5d618d9f565b60200260200101819052508181600281518110616c7c57616c7c618d9f565b6020908102919091010152949350505050565b6020808301518351835192840151600093616cad9291849190617686565b14159392505050565b60408051808201909152600080825260208201526000616ce88460000151856020015185600001518660200151617797565b9050836020015181616cfa919061860f565b84518590616d0990839061860f565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015616d3d5750816139ff565b6020808301519084015160019114616d645750815160208481015190840151829020919020145b8015616d9557825184518590616d7b90839061860f565b9052508251602085018051616d919083906194cd565b9052505b509192915050565b6040805180820190915260008082526020820152616dbc8383836178b7565b5092915050565b60606000826000015167ffffffffffffffff811115616de457616de46180b6565b6040519080825280601f01601f191660200182016040528015616e0e576020820181803683370190505b5090506000602082019050616dbc8185602001518660000151617962565b60606000616e38613df5565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081616e5557905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616eb090618f0c565b935060ff1681518110616ec557616ec5618d9f565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001616f16919061968a565b604051602081830303815290604052828280616f3190618f0c565b935060ff1681518110616f4657616f46618d9f565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280616f9390618f0c565b935060ff1681518110616fa857616fa8618d9f565b602002602001018190525082604051602001616fc49190618e3a565b604051602081830303815290604052828280616fdf90618f0c565b935060ff1681518110616ff457616ff4618d9f565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061704190618f0c565b935060ff168151811061705657617056618d9f565b602002602001018190525061706b87846179dc565b828261707681618f0c565b935060ff168151811061708b5761708b618d9f565b6020908102919091010152855151156171375760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826170dd81618f0c565b935060ff16815181106170f2576170f2618d9f565b602002602001018190525061710b8660000151846179dc565b828261711681618f0c565b935060ff168151811061712b5761712b618d9f565b60200260200101819052505b8560800151156171a55760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261718081618f0c565b935060ff168151811061719557617195618d9f565b602002602001018190525061720b565b841561720b5760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826171ea81618f0c565b935060ff16815181106171ff576171ff618d9f565b60200260200101819052505b604086015151156172a75760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261725581618f0c565b935060ff168151811061726a5761726a618d9f565b6020026020010181905250856040015182828061728690618f0c565b935060ff168151811061729b5761729b618d9f565b60200260200101819052505b8560600151156173115760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826172f081618f0c565b935060ff168151811061730557617305618d9f565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561732f5761732f6180b6565b60405190808252806020026020018201604052801561736257816020015b606081526020019060019003908161734d5790505b50905060005b8260ff168160ff1610156173bb57838160ff168151811061738b5761738b618d9f565b6020026020010151828260ff16815181106173a8576173a8618d9f565b6020908102919091010152600101617368565b50979650505050505050565b60408051808201909152600080825260208201528151835110156173ec5750816139ff565b81518351602085015160009291617402916194cd565b61740c919061860f565b6020840151909150600190821461742d575082516020840151819020908220145b80156174485783518551869061744490839061860f565b9052505b50929392505050565b60008082600001516174758560000151866020015186600001518760200151617797565b61747f91906194cd565b90505b8351602085015161749391906194cd565b8111616dbc57816174a3816196cf565b92505082600001516174da8560200151836174be919061860f565b86516174ca919061860f565b8386600001518760200151617797565b6174e491906194cd565b9050617482565b606060006174f98484617451565b6175049060016194cd565b67ffffffffffffffff81111561751c5761751c6180b6565b60405190808252806020026020018201604052801561754f57816020015b606081526020019060019003908161753a5790505b50905060005b81518110156157c45761756b6159e68686616d9d565b82828151811061757d5761757d618d9f565b6020908102919091010152600101617555565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106175d9577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310617605576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061762357662386f26fc10000830492506010015b6305f5e100831061763b576305f5e100830492506008015b612710831061764f57612710830492506004015b60648310617661576064830492506002015b600a83106139ff5760010192915050565b600061767e8383617a1c565b159392505050565b60008085841161778d576020841161773957600084156176d15760016176ad86602061860f565b6176b89060086196e9565b6176c39060026197e7565b6176cd919061860f565b1990505b83518116856176e089896194cd565b6176ea919061860f565b805190935082165b8181146177245787841161770c57879450505050506153f5565b83617716816197f3565b9450508284511690506176f2565b61772e87856194cd565b9450505050506153f5565b838320617746858861860f565b61775090876194cd565b91505b85821061778b578482208082036177785761776e86846194cd565b93505050506153f5565b61778360018461860f565b925050617753565b505b5092949350505050565b600083818685116178a2576020851161785157600085156177e35760016177bf87602061860f565b6177ca9060086196e9565b6177d59060026197e7565b6177df919061860f565b1990505b845181166000876177f48b8b6194cd565b6177fe919061860f565b855190915083165b8281146178435781861061782b5761781e8b8b6194cd565b96505050505050506153f5565b85617835816196cf565b965050838651169050617806565b8596505050505050506153f5565b508383206000905b617863868961860f565b82116178a05785832080820361787f57839450505050506153f5565b61788a6001856194cd565b9350508180617898906196cf565b925050617859565b505b6178ac87876194cd565b979650505050505050565b604080518082019091526000808252602082015260006178e98560000151866020015186600001518760200151617797565b602080870180519186019190915251909150617905908261860f565b83528451602086015161791891906194cd565b81036179275760008552617959565b8351835161793591906194cd565b8551869061794490839061860f565b905250835161795390826194cd565b60208601525b50909392505050565b6020811061799a57815183526179796020846194cd565b92506179866020836194cd565b915061799360208261860f565b9050617962565b60001981156179c95760016179b083602061860f565b6179bc906101006197e7565b6179c6919061860f565b90505b9151835183169219169190911790915250565b606060006179ea8484613ec8565b8051602080830151604051939450617a049390910161980a565b60405160208183030381529060405291505092915050565b8151815160009190811115617a2f575081515b6020808501519084015160005b83811015617ae85782518251808214617ab8576000196020871015617a9757600184617a6989602061860f565b617a7391906194cd565b617a7e9060086196e9565b617a899060026197e7565b617a93919061860f565b1990505b8181168382168181039114617ab55797506139ff9650505050505050565b50505b617ac36020866194cd565b9450617ad06020856194cd565b93505050602081617ae191906194cd565b9050617a3c565b50845186516145769190619862565b610c9f8061988383390190565b610f2a8061a52283390190565b610aa98061b44c83390190565b610b3f8061bef583390190565b6120728061ca3483390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001617b7b617b80565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001617b7b6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015617c325783516001600160a01b0316835260209384019390920191600101617c0b565b509095945050505050565b60005b83811015617c58578181015183820152602001617c40565b50506000910152565b60008151808452617c79816020860160208601617c3d565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d89577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015617d6f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352617d59848651617c61565b6020958601959094509290920191600101617d1f565b509197505050602094850194929092019150600101617cb5565b50929695505050505050565b600081518084526020840193506020830160005b82811015617de95781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101617da9565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d89577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752617e5f6040880182617c61565b9050602082015191508681036020880152617e7a8183617d95565b965050506020938401939190910190600101617e1b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d89577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452617ef3858351617c61565b94506020938401939190910190600101617eb9565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015617d89577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152617f896040870182617d95565b9550506020938401939190910190600101617f30565b600060208284031215617fb157600080fd5b81518015158114613af857600080fd5b610100815260056101008201527f544f4b454e000000000000000000000000000000000000000000000000000000610120820152610140602082015260036101408201527f544b4e000000000000000000000000000000000000000000000000000000000061016082015260006101808201905060ff881660408301528660608301526003861061807b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8560808301528460a083015261809c60c08301856001600160a01b03169052565b6001600160a01b03831660e0830152979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c908216806180f957607f821691505b602082108103615cc1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f82111561817c57806000526020600020601f840160051c810160208510156181595750805b601f840160051c820191505b818110156181795760008155600101618165565b50505b505050565b815167ffffffffffffffff81111561819b5761819b6180b6565b6181af816181a984546180e5565b84618132565b6020601f8211600181146181e357600083156181cb5750848201515b600019600385901b1c1916600184901b178455618179565b600084815260208120601f198516915b8281101561821357878501518255602094850194600190920191016181f3565b50848210156182315786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561825257600080fd5b5051919050565b60608152600061826c6060830186617c61565b602083019490945250901515604090910152919050565b600081546001600160a01b038116845260ff8160a01c1615156020850152506001600160a01b0360018301541660408401526002820160a06060850152600081546182cd816180e5565b8060a088015260018216600081146182ec57600181146183265761835a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660c089015260c082151560051b890101935061835a565b84600052602060002060005b838110156183515781548a820160c00152600190910190602001618332565b890160c0019450505b50505060038401546080860152809250505092915050565b60e08152600061838560e0830189617c61565b62ffffff881660208401526001600160a01b038716604084015282810360608401526183b18187617c61565b85546080850152600186015460ff16151560a085015290505b82810360c08401526183dc8185618283565b9998505050505050505050565b6001600160a01b0384168152826020820152606060408201526000615ca76060830184617c61565b60c08152600061842460c0830189617c61565b8760208401526001600160a01b0387166040840152828103606084015261844b8187617c61565b6080840195909552505090151560a090910152949350505050565b6001600160a01b038616815284602082015260a06040820152600061848e60a0830186617c61565b6060830194909452509015156080909101529392505050565b8281526040602082015260006153f56040830184617c61565b6001600160a01b0384541681526001600160a01b0383166020820152606060408201526000615ca76060830184617c61565b6040516060810167ffffffffffffffff81118282101715618515576185156180b6565b60405290565b60008067ffffffffffffffff841115618536576185366180b6565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff82111715618565576185656180b6565b60405283815290508082840185101561857d57600080fd5b6157c4846020830185617c3d565b600082601f83011261859c57600080fd5b613af88383516020850161851b565b6000602082840312156185bd57600080fd5b815167ffffffffffffffff8111156185d457600080fd5b6139fb8482850161858b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156139ff576139ff6185e0565b6101208152600061863761012083018b617c61565b6001600160a01b038a16602084015288604084015287606084015286608084015282810360a084015261866a8187617c61565b855160c08501526020860151151560e08501529050828103610100840152613ceb8185618283565b60e0815260006186a560e0830189617c61565b8760208401526001600160a01b038716604084015282810360608401526186cc8187617c61565b855160808501526020860151151560a085015290506183ca565b60a0815260006186f960a0830187617c61565b828103602084015261870b8187617c61565b85516040850152602086015115156060850152905082810360808401526178ac8185618283565b60c08152600061874560c0830188617c61565b6001600160a01b038716602084015282810360408401526187668187617c61565b8551606085015260208601511515608085015290505b82810360a084015261878e8185618283565b98975050505050505050565b60c0815260006187ad60c0830188617c61565b6001600160a01b038716602084015282810360408401526187ce8187617c61565b85546060850152600186015460ff1615156080850152905061877c565b60a0815260006187fe60a0830188617c61565b6001600160a01b0387166020840152828103604084015261881f8187617c61565b606084019590955250509015156080909101529392505050565b6001600160a01b03831681526040602082015260006153f56040830184617c61565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161889381601a850160208801617c3d565b7f3a20000000000000000000000000000000000000000000000000000000000000601a9184019182015283516188d081601c840160208801617c3d565b01601c01949350505050565b602081526000613af86020830184617c61565b60006020828403121561890157600080fd5b81516001600160a01b0381168114613af857600080fd5b6000835161892a818460208801617c3d565b83519083019061893e818360208801617c3d565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161897f81601a850160208801617c3d565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a9184019182015283516189bc816033840160208801617c3d565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000613af86080830184617c61565b600060208284031215618a4b57600080fd5b815167ffffffffffffffff811115618a6257600080fd5b8201601f81018413618a7357600080fd5b6139fb8482516020840161851b565b60008551618a94818460208a01617c3d565b7f2f000000000000000000000000000000000000000000000000000000000000009083019081528551618ace816001840160208a01617c3d565b7f2f00000000000000000000000000000000000000000000000000000000000000600192909101918201528451618b0c816002840160208901617c3d565b6001818301019150507f2f0000000000000000000000000000000000000000000000000000000000000060018201528351618b4e816002840160208801617c3d565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b604081526000618b996040830184617c61565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e2061727469666163742000815260008251618c1081601f850160208701617c3d565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b604081526000618c7d6040830184617c61565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b604081526000618ccf6040830184617c61565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b27000000000000000000000000815260008251618d46816014850160208701617c3d565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b604081526000618d8d6040830185617c61565b8281036020840152613af48185617c61565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f2200000000000000000000000000000000000000000000000000000000000000815260008251618e06816001850160208701617c3d565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b60008251618e4c818460208701617c3d565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e747261637420000000000000000000000000000000000000000000604082015260008251618eff81604b850160208701617c3d565b91909101604b0192915050565b600060ff821660ff8103618f2257618f226185e0565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c69400000000000000000000000000000000000000000000000602082015260008251618f89816029850160208701617c3d565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000613af86080830184617c61565b600060208284031215618fef57600080fd5b815167ffffffffffffffff81111561900657600080fd5b82016060818503121561901857600080fd5b6190206184f2565b81518060030b811461903157600080fd5b8152602082015167ffffffffffffffff81111561904d57600080fd5b6190598682850161858b565b602083015250604082015167ffffffffffffffff81111561907957600080fd5b6190858682850161858b565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f22000000000000000000000000000000000000000000000000000000000000006020820152600082516190f1816021850160208701617c3d565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f27000000000000000000000000000000000000000000000000000000000000006020820152600083516192dd816021850160208801617c3d565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161931a81602e840160208801617c3d565b01602e01949350505050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a200000000000000000000000000000000000000000000000602082015260008251618f89816029850160208701617c3d565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a0000000000000000000000000000000000000000000000000000000000006020820152600082516193e2816022850160208701617c3d565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161942781600e850160208701617c3d565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b808201808211156139ff576139ff6185e0565b7f53504458206c6963656e7365206964656e746966696572200000000000000000815260008351619518816018850160208801617c3d565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161955581601c840160208801617c3d565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161965b818460208701617c3d565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b7f406f70656e7a657070656c696e2f75706772616465732d636f726540000000008152600082516196c281601c850160208701617c3d565b91909101601c0192915050565b600060001982036196e2576196e26185e0565b5060010190565b80820281158282048414176139ff576139ff6185e0565b6001815b600184111561973b5780850481111561971f5761971f6185e0565b600184161561972d57908102905b60019390931c928002619704565b935093915050565b600082619752575060016139ff565b8161975f575060006139ff565b8160018114619775576002811461977f5761979b565b60019150506139ff565b60ff841115619790576197906185e0565b50506001821b6139ff565b5060208310610133831016604e8410600b84101617156197be575081810a6139ff565b6197cb6000198484619700565b80600019048211156197df576197df6185e0565b029392505050565b6000613af88383619743565b600081619802576198026185e0565b506000190190565b6000835161981c818460208801617c3d565b7f3a000000000000000000000000000000000000000000000000000000000000009083019081528351619856816001840160208801617c3d565b01600101949350505050565b8181036000831280158383131683831282161715616dbc57616dbc6185e056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610f06806100246000396000f3fe60806040526004361061006e5760003560e01c8063c51316911161004b578063c5131691146100d5578063c9028a36146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a214610077578063676cc054146100975780636ed70169146100c057005b3661007557005b005b34801561008357600080fd5b50610075610092366004610709565b610148565b6100aa6100a5366004610745565b6101de565b6040516100b79190610840565b60405180910390f35b3480156100cc57600080fd5b5061007561023f565b3480156100e157600080fd5b506100756100f0366004610709565b610274565b34801561010157600080fd5b50610075610110366004610853565b61034f565b6100756101233660046109b3565b61038b565b34801561013457600080fd5b50610075610143366004610a9f565b6103cf565b610150610404565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610447565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b60607fd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a35250161020e6020860186610b89565b848460405161021f93929190610bed565b60405180910390a1506040805160208101909152600081525b9392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61027c610404565b6000610289600285610c26565b9050806000036102c5576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102e773ffffffffffffffffffffffffffffffffffffffff8416338484610447565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f689a5a5cb55e795ffe4cd8b419cd3bb0a3373974c54d25f64e734d7388b93e9b3382604051610380929190610c61565b60405180910390a150565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa33348585856040516103c2959493929190610d53565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103c29493929190610ddd565b600260005403610440576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104dc9085906104e2565b50505050565b600061050473ffffffffffffffffffffffffffffffffffffffff84168361057d565b905080516000141580156105295750808060200190518101906105279190610e97565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061023883836000846000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105b09190610eb4565b60006040518083038185875af1925050503d80600081146105ed576040519150601f19603f3d011682016040523d82523d6000602084013e6105f2565b606091505b509150915061060286838361060c565b9695505050505050565b6060826106215761061c8261069b565b610238565b8151158015610645575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610694576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610574565b5080610238565b8051156106ab5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461070457600080fd5b919050565b60008060006060848603121561071e57600080fd5b8335925061072e602085016106e0565b915061073c604085016106e0565b90509250925092565b6000806000838503604081121561075b57600080fd5b602081121561076957600080fd5b50839250602084013567ffffffffffffffff81111561078757600080fd5b8401601f8101861361079857600080fd5b803567ffffffffffffffff8111156107af57600080fd5b8660208284010111156107c157600080fd5b939660209190910195509293505050565b60005b838110156107ed5781810151838201526020016107d5565b50506000910152565b6000815180845261080e8160208601602086016107d2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061023860208301846107f6565b60006020828403121561086557600080fd5b813567ffffffffffffffff81111561087c57600080fd5b82016080818503121561023857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156109045761090461088e565b604052919050565b600082601f83011261091d57600080fd5b813567ffffffffffffffff8111156109375761093761088e565b61096860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108bd565b81815284602083860101111561097d57600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106dd57600080fd5b80356107048161099a565b6000806000606084860312156109c857600080fd5b833567ffffffffffffffff8111156109df57600080fd5b6109eb8682870161090c565b935050602084013591506040840135610a038161099a565b809150509250925092565b600067ffffffffffffffff821115610a2857610a2861088e565b5060051b60200190565b600082601f830112610a4357600080fd5b8135610a56610a5182610a0e565b6108bd565b8082825260208201915060208360051b860101925085831115610a7857600080fd5b602085015b83811015610a95578035835260209283019201610a7d565b5095945050505050565b600080600060608486031215610ab457600080fd5b833567ffffffffffffffff811115610acb57600080fd5b8401601f81018613610adc57600080fd5b8035610aea610a5182610a0e565b8082825260208201915060208360051b850101925088831115610b0c57600080fd5b602084015b83811015610b4e57803567ffffffffffffffff811115610b3057600080fd5b610b3f8b60208389010161090c565b84525060209283019201610b11565b509550505050602084013567ffffffffffffffff811115610b6e57600080fd5b610b7a86828701610a32565b92505061073c604085016109a8565b600060208284031215610b9b57600080fd5b610238826106e0565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff84168152604060208201526000610c1d604083018486610ba4565b95945050505050565b600082610c5c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c9f836106e0565b16604082015273ffffffffffffffffffffffffffffffffffffffff610cc6602084016106e0565b166060820152600080604084013590508060808401525060608301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610d1257600080fd5b830160208101903567ffffffffffffffff811115610d2f57600080fd5b803603821315610d3e57600080fd5b608060a085015261060260c085018284610ba4565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d8860a08301866107f6565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610dd3578151865260209586019590910190600101610db5565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e70577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e5b8583516107f6565b94506020938401939190910190600101610e21565b505050508281036040840152610e868186610da1565b915050610c1d606083018415159052565b600060208284031215610ea957600080fd5b81516102388161099a565b60008251610ec68184602087016107d2565b919091019291505056fea2646970667358221220a40191c0a0256363e6edb7673accb387b7a3597d9a76c64faccadc4ce57c234664736f6c634300081a00336080604052348015600f57600080fd5b50604051610aa9380380610aa9833981016040819052602c916050565b600080546001600160a01b0319166001600160a01b0392909216919091179055607e565b600060208284031215606157600080fd5b81516001600160a01b0381168114607757600080fd5b9392505050565b610a1c8061008d6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b61461005b5780637a34d8bb146100a4575b600080fd5b610059610054366004610658565b6100b7565b005b60005461007b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6100596100b23660046106f8565b61032a565b60008383836040516024016100ce939291906107f4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f970000000000000000000000000000000000000000000000000000000017905260005490915073ffffffffffffffffffffffffffffffffffffffff8087169163095ea7b3911661017589600261081e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff909216600483015260248201526044016020604051808303816000875af11580156101e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610209919061085e565b61023f576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a081018252610321808252600160208084018290528385019290925283518083018552600080825260608501919091526080840181905284518086018652918252918101829052905492517f7b15118b0000000000000000000000000000000000000000000000000000000081529192909173ffffffffffffffffffffffffffffffffffffffff90911690637b15118b906102ed908c908c908c90899088908a906004016108f7565b600060405180830381600087803b15801561030757600080fd5b505af115801561031b573d6000803e3d6000fd5b50505050505050505050505050565b6000838383604051602401610341939291906107f4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe04d4f9700000000000000000000000000000000000000000000000000000000179052815160a081018352610321808252600182840181905282850191909152835180840185526000808252606084019190915260808301819052845180860186528281529384018190525493517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9485166004820152602481019190915293945092909188169063095ea7b3906044016020604051808303816000875af115801561047c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a0919061085e565b506000546040517f06cb898300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906306cb8983906104ff908b908b90889087908990600401610972565b600060405180830381600087803b15801561051957600080fd5b505af115801561052d573d6000803e3d6000fd5b505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261057b57600080fd5b81356020830160008067ffffffffffffffff84111561059c5761059c61053b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156105e9576105e961053b565b60405283815290508082840187101561060157600080fd5b838360208301376000602085830101528094505050505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461064257600080fd5b919050565b801515811461065557600080fd5b50565b60008060008060008060c0878903121561067157600080fd5b863567ffffffffffffffff81111561068857600080fd5b61069489828a0161056a565b965050602087013594506106aa6040880161061e565b9350606087013567ffffffffffffffff8111156106c657600080fd5b6106d289828a0161056a565b9350506080870135915060a08701356106ea81610647565b809150509295509295509295565b600080600080600060a0868803121561071057600080fd5b853567ffffffffffffffff81111561072757600080fd5b6107338882890161056a565b9550506107426020870161061e565b9350604086013567ffffffffffffffff81111561075e57600080fd5b61076a8882890161056a565b93505060608601359150608086013561078281610647565b809150509295509295909350565b6000815180845260005b818110156107b65760208185018101518683018201520161079a565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6060815260006108076060830186610790565b602083019490945250901515604090910152919050565b80820180821115610858577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92915050565b60006020828403121561087057600080fd5b815161087b81610647565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff815116825260208101511515602083015273ffffffffffffffffffffffffffffffffffffffff60408201511660408301526000606082015160a060608501526108e360a0850182610790565b608093840151949093019390935250919050565b60e08152600061090a60e0830189610790565b87602084015273ffffffffffffffffffffffffffffffffffffffff87166040840152828103606084015261093e8187610790565b855160808501526020860151151560a0850152905082810360c08401526109658185610882565b9998505050505050505050565b60c08152600061098560c0830188610790565b73ffffffffffffffffffffffffffffffffffffffff8716602084015282810360408401526109b38187610790565b85516060850152602086015115156080850152905082810360a08401526109da8185610882565b9897505050505050505056fea2646970667358221220d537d7a8149cdb3025211768bab067e858b4bd38e69fcb1bfba3dec8b144f23764736f6c634300081a0033608060405234801561001057600080fd5b50604051610b3f380380610b3f83398101604081905261002f916100b9565b600380546001600160a01b038086166001600160a01b0319928316179092556004805485841690831617905560058054928416929091169190911790556040517f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac590600090a15050506100fc565b80516001600160a01b03811681146100b457600080fd5b919050565b6000806000606084860312156100ce57600080fd5b6100d78461009d565b92506100e56020850161009d565b91506100f36040850161009d565b90509250925092565b610a348061010b6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806397770dff11610081578063d7fd7afb1161005b578063d7fd7afb146101f2578063d936a01214610220578063ee2815ba1461024057600080fd5b806397770dff146101b9578063a7cb0507146101cc578063c63585cc146101df57600080fd5b8063513a9c05116100b2578063513a9c0514610143578063569541b914610179578063842da36d1461019957600080fd5b80630be15547146100ce5780633c669d551461012e575b600080fd5b6101046100dc36600461071e565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61014161013c366004610760565b610253565b005b61010461015136600461071e565b60026020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6003546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6005546101049073ffffffffffffffffffffffffffffffffffffffff1681565b6101416101c73660046107fd565b6103a0565b6101416101da36600461081f565b610419565b6101046101ed366004610841565b610467565b61021261020036600461071e565b60006020819052908152604090205481565b604051908152602001610125565b6004546101049073ffffffffffffffffffffffffffffffffffffffff1681565b61014161024e366004610884565b61059c565b604080516080810182526000606082019081528152336020820152468183015290517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301526024820186905286169063a9059cbb906044016020604051808303816000875af11580156102e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030b91906108b0565b506040517fde43156e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87169063de43156e90610366908490899089908990899060040161091b565b600060405180830381600087803b15801561038057600080fd5b505af1158015610394573d6000803e3d6000fd5b50505050505050505050565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e9060200160405180910390a150565b6000828152602081815260409182902083905581518481529081018390527f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d91015b60405180910390a15050565b60008060006104768585610620565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152919350915086906048016040516020818303038152906040528051906020012060405160200161055c9291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209695505050505050565b60008281526001602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85169081179091558251858152918201527fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d910161045b565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610688576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16106106c25782846106c5565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610717576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60006020828403121561073057600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461075b57600080fd5b919050565b60008060008060006080868803121561077857600080fd5b61078186610737565b945061078f60208701610737565b935060408601359250606086013567ffffffffffffffff8111156107b257600080fd5b8601601f810188136107c357600080fd5b803567ffffffffffffffff8111156107da57600080fd5b8860208284010111156107ec57600080fd5b959894975092955050506020019190565b60006020828403121561080f57600080fd5b61081882610737565b9392505050565b6000806040838503121561083257600080fd5b50508035926020909101359150565b60008060006060848603121561085657600080fd5b61085f84610737565b925061086d60208501610737565b915061087b60408501610737565b90509250925092565b6000806040838503121561089757600080fd5b823591506108a760208401610737565b90509250929050565b6000602082840312156108c257600080fd5b8151801515811461081857600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60808152600086516060608084015280518060e085015260005b81811015610953576020818401810151610100878401015201610935565b5060008482016101000152602089015173ffffffffffffffffffffffffffffffffffffffff811660a0860152601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168401915050604088015160c084015273ffffffffffffffffffffffffffffffffffffffff871660208401528560408401526101008382030160608401526109f2610100820185876108d2565b9897505050505050505056fea26469706673582212201600a256a4ffaaa4ceb3b81d9f67be9d8f33665245b35eeba52fdc70200176a764736f6c634300081a003360c060405234801561001057600080fd5b5060405161207238038061207283398101604081905261002f916101f0565b6001600160a01b038216158061004c57506001600160a01b038116155b1561006a5760405163d92e233d60e01b815260040160405180910390fd5b60066100768982610342565b5060076100838882610342565b506008805460ff191660ff881617905560808590528360028111156100aa576100aa610400565b60a08160028111156100be576100be610400565b905250600192909255600080546001600160a01b039283166001600160a01b0319909116179055600880549190921661010002610100600160a81b0319909116179055506104169350505050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261013357600080fd5b81516001600160401b0381111561014c5761014c61010c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561017a5761017a61010c565b60405281815283820160200185101561019257600080fd5b60005b828110156101b157602081860181015183830182015201610195565b506000918101602001919091529392505050565b8051600381106101d457600080fd5b919050565b80516001600160a01b03811681146101d457600080fd5b600080600080600080600080610100898b03121561020d57600080fd5b88516001600160401b0381111561022357600080fd5b61022f8b828c01610122565b60208b015190995090506001600160401b0381111561024d57600080fd5b6102598b828c01610122565b975050604089015160ff8116811461027057600080fd5b60608a0151909650945061028660808a016101c5565b60a08a0151909450925061029c60c08a016101d9565b91506102aa60e08a016101d9565b90509295985092959890939650565b600181811c908216806102cd57607f821691505b6020821081036102ed57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561033d57806000526020600020601f840160051c8101602085101561031a5750805b601f840160051c820191505b8181101561033a5760008155600101610326565b50505b505050565b81516001600160401b0381111561035b5761035b61010c565b61036f8161036984546102b9565b846102f3565b6020601f8211600181146103a3576000831561038b5750848201515b600019600385901b1c1916600184901b17845561033a565b600084815260208120601f198516915b828110156103d357878501518255602094850194600190920191016103b3565b50848210156103f15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052602160045260246000fd5b60805160a051611c1b61045760003960006103440152600081816102f001528181610bdc01528181610ce201528181610efe01526110040152611c1b6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c806395d89b41116100f9578063ccc7759911610097578063eddeb12311610071578063eddeb12314610461578063f2441b3214610474578063f687d12a14610494578063fc5fecd5146104a757600080fd5b8063ccc77599146103d4578063d9eeebed146103e7578063dd62ed3e1461041b57600080fd5b8063b84c8246116100d3578063b84c824614610386578063c47f00271461039b578063c7012626146103ae578063c835d7cc146103c157600080fd5b806395d89b4114610337578063a3413d031461033f578063a9059cbb1461037357600080fd5b80633ce4a5bc116101665780634d8943bb116101405780634d8943bb146102ac57806370a08231146102b557806385e1f4d0146102eb5780638b851b951461031257600080fd5b80633ce4a5bc1461024657806342966c681461028657806347e7ef241461029957600080fd5b806318160ddd1161019757806318160ddd1461021657806323b872dd1461021e578063313ce5671461023157600080fd5b806306fdde03146101be578063091d2788146101dc578063095ea7b3146101f3575b600080fd5b6101c66104ba565b6040516101d39190611648565b60405180910390f35b6101e560015481565b6040519081526020016101d3565b610206610201366004611687565b61054c565b60405190151581526020016101d3565b6005546101e5565b61020661022c3660046116b3565b610563565b60085460405160ff90911681526020016101d3565b61026173735b14bb79463307aacbed86daf3322b1e6226ab81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6102066102943660046116f4565b6105fa565b6102066102a7366004611687565b61060e565b6101e560025481565b6101e56102c336600461170d565b73ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6101e57f000000000000000000000000000000000000000000000000000000000000000081565b60085461026190610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6101c6610767565b6103667f000000000000000000000000000000000000000000000000000000000000000081565b6040516101d3919061172a565b610206610381366004611687565b610776565b610399610394366004611832565b610783565b005b6103996103a9366004611832565b6107e0565b6102066103bc366004611883565b610839565b6103996103cf36600461170d565b610988565b6103996103e236600461170d565b610a9c565b6103ef610bb0565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016101d3565b6101e56104293660046118dc565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260046020908152604080832093909416825291909152205490565b61039961046f3660046116f4565b610dce565b6000546102619073ffffffffffffffffffffffffffffffffffffffff1681565b6103996104a23660046116f4565b610e50565b6103ef6104b53660046116f4565b610ed2565b6060600680546104c990611915565b80601f01602080910402602001604051908101604052809291908181526020018280546104f590611915565b80156105425780601f1061051757610100808354040283529160200191610542565b820191906000526020600020905b81548152906001019060200180831161052557829003601f168201915b5050505050905090565b60006105593384846110ee565b5060015b92915050565b60006105708484846111f7565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054828110156105db576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ef85336105ea8685611997565b6110ee565b506001949350505050565b600061060633836113b2565b506001919050565b60003373735b14bb79463307aacbed86daf3322b1e6226ab1480159061064c575060005473ffffffffffffffffffffffffffffffffffffffff163314155b80156106755750600854610100900473ffffffffffffffffffffffffffffffffffffffff163314155b156106ac576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106b683836114f4565b6040517f735b14bb79463307aacbed86daf3322b1e6226ab000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8416907f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab390603401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107569186906119aa565b60405180910390a250600192915050565b6060600780546104c990611915565b60006105593384846111f7565b3373735b14bb79463307aacbed86daf3322b1e6226ab146107d0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60076107dc8282611a1b565b5050565b3373735b14bb79463307aacbed86daf3322b1e6226ab1461082d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60066107dc8282611a1b565b6000806000610846610bb0565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273735b14bb79463307aacbed86daf3322b1e6226ab602482015260448101829052919350915073ffffffffffffffffffffffffffffffffffffffff8316906323b872dd906064016020604051808303816000875af11580156108d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fc9190611b34565b610932576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61093c33856113b2565b60025460405133917f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d9559161097591899189918791611b56565b60405180910390a2506001949350505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab146109d5576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610a22576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae906020015b60405180910390a150565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610ae9576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff8416908102919091179091556040519081527f88815d964e380677e86d817e7d65dea59cb7b4c3b5b7a0c8ec7ea4a74f90a38790602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610cb6576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015610d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d699190611ba2565b905080600003610da5576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025460015483610db89190611bbb565b610dc29190611bd2565b92959294509192505050565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e1b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f90602001610a91565b3373735b14bb79463307aacbed86daf3322b1e6226ab14610e9d576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018190556040518181527fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a90602001610a91565b600080546040517f0be155470000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201528291829173ffffffffffffffffffffffffffffffffffffffff90911690630be1554790602401602060405180830381865afa158015610f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f899190611b85565b905073ffffffffffffffffffffffffffffffffffffffff8116610fd8576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080546040517fd7fd7afb0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff9091169063d7fd7afb90602401602060405180830381865afa158015611067573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108b9190611ba2565b9050806000036110c7576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906110d78784611bbb565b6110e19190611bd2565b9296929550919350505050565b73ffffffffffffffffffffffffffffffffffffffff831661113b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611188576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316611244576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216611291576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902054818110156112f1576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112fb8282611997565b73ffffffffffffffffffffffffffffffffffffffff808616600090815260036020526040808220939093559085168152908120805484929061133e908490611bd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113a491815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff82166113ff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020548181101561145f576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114698282611997565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260036020526040812091909155600580548492906114a4908490611997565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016111ea565b73ffffffffffffffffffffffffffffffffffffffff8216611541576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008282546115539190611bd2565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805483929061158d908490611bd2565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000815180845260005b8181101561160a576020818501810151868301820152016115ee565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061165b60208301846115e4565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461168457600080fd5b50565b6000806040838503121561169a57600080fd5b82356116a581611662565b946020939093013593505050565b6000806000606084860312156116c857600080fd5b83356116d381611662565b925060208401356116e381611662565b929592945050506040919091013590565b60006020828403121561170657600080fd5b5035919050565b60006020828403121561171f57600080fd5b813561165b81611662565b6020810160038310611765577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008067ffffffffffffffff8411156117b5576117b561176b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156118025761180261176b565b60405283815290508082840185101561181a57600080fd5b83836020830137600060208583010152509392505050565b60006020828403121561184457600080fd5b813567ffffffffffffffff81111561185b57600080fd5b8201601f8101841361186c57600080fd5b61187b8482356020840161179a565b949350505050565b6000806040838503121561189657600080fd5b823567ffffffffffffffff8111156118ad57600080fd5b8301601f810185136118be57600080fd5b6118cd8582356020840161179a565b95602094909401359450505050565b600080604083850312156118ef57600080fd5b82356118fa81611662565b9150602083013561190a81611662565b809150509250929050565b600181811c9082168061192957607f821691505b602082108103611962577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561055d5761055d611968565b6040815260006119bd60408301856115e4565b90508260208301529392505050565b601f821115611a1657806000526020600020601f840160051c810160208510156119f35750805b601f840160051c820191505b81811015611a1357600081556001016119ff565b50505b505050565b815167ffffffffffffffff811115611a3557611a3561176b565b611a4981611a438454611915565b846119cc565b6020601f821160018114611a9b5760008315611a655750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455611a13565b6000848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015611ae95787850151825560209485019460019092019101611ac9565b5084821015611b2557868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215611b4657600080fd5b8151801515811461165b57600080fd5b608081526000611b6960808301876115e4565b6020830195909552506040810192909252606090910152919050565b600060208284031215611b9757600080fd5b815161165b81611662565b600060208284031215611bb457600080fd5b5051919050565b808202811582820484141761055d5761055d611968565b8082018082111561055d5761055d61196856fea2646970667358221220d6ba834f25782689ed13bffb6ac9ff2c8d3b5342c94a515aea8197a76070ad3f64736f6c634300081a0033a2646970667358221220a865c5b073b041a7a2fc9f414fc2d359654e0a4b21dc963fdb40e19fed75943b64736f6c634300081a0033", } // GatewayEVMZEVMTestABI is the input ABI used to generate the binding from. @@ -1967,12 +1967,14 @@ func (it *GatewayEVMZEVMTestReceivedOnCallIterator) Close() error { // GatewayEVMZEVMTestReceivedOnCall represents a ReceivedOnCall event raised by the GatewayEVMZEVMTest contract. type GatewayEVMZEVMTestReceivedOnCall struct { - Raw types.Log // Blockchain specific contextual infos + Sender common.Address + Message []byte + Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedOnCall is a free log retrieval operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// FilterReceivedOnCall is a free log retrieval operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) FilterReceivedOnCall(opts *bind.FilterOpts) (*GatewayEVMZEVMTestReceivedOnCallIterator, error) { logs, sub, err := _GatewayEVMZEVMTest.contract.FilterLogs(opts, "ReceivedOnCall") @@ -1982,9 +1984,9 @@ func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) FilterReceivedOnCall(opts return &GatewayEVMZEVMTestReceivedOnCallIterator{contract: _GatewayEVMZEVMTest.contract, event: "ReceivedOnCall", logs: logs, sub: sub}, nil } -// WatchReceivedOnCall is a free log subscription operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// WatchReceivedOnCall is a free log subscription operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) WatchReceivedOnCall(opts *bind.WatchOpts, sink chan<- *GatewayEVMZEVMTestReceivedOnCall) (event.Subscription, error) { logs, sub, err := _GatewayEVMZEVMTest.contract.WatchLogs(opts, "ReceivedOnCall") @@ -2019,9 +2021,9 @@ func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) WatchReceivedOnCall(opts }), nil } -// ParseReceivedOnCall is a log parse operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// ParseReceivedOnCall is a log parse operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) ParseReceivedOnCall(log types.Log) (*GatewayEVMZEVMTestReceivedOnCall, error) { event := new(GatewayEVMZEVMTestReceivedOnCall) if err := _GatewayEVMZEVMTest.contract.UnpackLog(event, "ReceivedOnCall", log); err != nil { diff --git a/v2/pkg/ierc20custody.sol/ierc20custody.go b/v2/pkg/ierc20custody.sol/ierc20custody.go index a6c07e89..37a14e4c 100644 --- a/v2/pkg/ierc20custody.sol/ierc20custody.go +++ b/v2/pkg/ierc20custody.sol/ierc20custody.go @@ -29,6 +29,11 @@ var ( _ = abi.ConvertType ) +// MessageContext is an auto generated low-level Go binding around an user-defined struct. +type MessageContext struct { + Sender common.Address +} + // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Sender common.Address @@ -39,7 +44,7 @@ type RevertContext struct { // IERC20CustodyMetaData contains all meta data concerning the IERC20Custody contract. var IERC20CustodyMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedCustodyTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"LegacyMethodsNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"messageContext\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unwhitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedCustodyTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Whitelisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"LegacyMethodsNotSupported\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", } // IERC20CustodyABI is the input ABI used to generate the binding from. @@ -240,25 +245,25 @@ func (_IERC20Custody *IERC20CustodyTransactorSession) Withdraw(token common.Addr return _IERC20Custody.Contract.Withdraw(&_IERC20Custody.TransactOpts, token, to, amount) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x21fc65f2. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0xad081852. // -// Solidity: function withdrawAndCall(address token, address to, uint256 amount, bytes data) returns() -func (_IERC20Custody *IERC20CustodyTransactor) WithdrawAndCall(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _IERC20Custody.contract.Transact(opts, "withdrawAndCall", token, to, amount, data) +// Solidity: function withdrawAndCall((address) messageContext, address token, address to, uint256 amount, bytes data) returns() +func (_IERC20Custody *IERC20CustodyTransactor) WithdrawAndCall(opts *bind.TransactOpts, messageContext MessageContext, token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Custody.contract.Transact(opts, "withdrawAndCall", messageContext, token, to, amount, data) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x21fc65f2. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0xad081852. // -// Solidity: function withdrawAndCall(address token, address to, uint256 amount, bytes data) returns() -func (_IERC20Custody *IERC20CustodySession) WithdrawAndCall(token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _IERC20Custody.Contract.WithdrawAndCall(&_IERC20Custody.TransactOpts, token, to, amount, data) +// Solidity: function withdrawAndCall((address) messageContext, address token, address to, uint256 amount, bytes data) returns() +func (_IERC20Custody *IERC20CustodySession) WithdrawAndCall(messageContext MessageContext, token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Custody.Contract.WithdrawAndCall(&_IERC20Custody.TransactOpts, messageContext, token, to, amount, data) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x21fc65f2. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0xad081852. // -// Solidity: function withdrawAndCall(address token, address to, uint256 amount, bytes data) returns() -func (_IERC20Custody *IERC20CustodyTransactorSession) WithdrawAndCall(token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _IERC20Custody.Contract.WithdrawAndCall(&_IERC20Custody.TransactOpts, token, to, amount, data) +// Solidity: function withdrawAndCall((address) messageContext, address token, address to, uint256 amount, bytes data) returns() +func (_IERC20Custody *IERC20CustodyTransactorSession) WithdrawAndCall(messageContext MessageContext, token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _IERC20Custody.Contract.WithdrawAndCall(&_IERC20Custody.TransactOpts, messageContext, token, to, amount, data) } // WithdrawAndRevert is a paid mutator transaction binding the contract method 0x99a3c356. diff --git a/v2/pkg/igatewayevm.sol/igatewayevm.go b/v2/pkg/igatewayevm.sol/igatewayevm.go index 2a8612a3..d8a2e30e 100644 --- a/v2/pkg/igatewayevm.sol/igatewayevm.go +++ b/v2/pkg/igatewayevm.sol/igatewayevm.go @@ -53,7 +53,7 @@ type RevertOptions struct { // IGatewayEVMMetaData contains all meta data concerning the IGatewayEVM contract. var IGatewayEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"messageContext\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"call\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositAndCall\",\"inputs\":[{\"name\":\"receiver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"messageContext\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeRevert\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeWithERC20\",\"inputs\":[{\"name\":\"messageContext\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revertWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", } // IGatewayEVMABI is the input ABI used to generate the binding from. @@ -307,46 +307,25 @@ func (_IGatewayEVM *IGatewayEVMTransactorSession) DepositAndCall0(receiver commo return _IGatewayEVM.Contract.DepositAndCall0(&_IGatewayEVM.TransactOpts, receiver, amount, asset, payload, revertOptions) } -// Execute is a paid mutator transaction binding the contract method 0x1cff79cd. -// -// Solidity: function execute(address destination, bytes data) payable returns(bytes) -func (_IGatewayEVM *IGatewayEVMTransactor) Execute(opts *bind.TransactOpts, destination common.Address, data []byte) (*types.Transaction, error) { - return _IGatewayEVM.contract.Transact(opts, "execute", destination, data) -} - -// Execute is a paid mutator transaction binding the contract method 0x1cff79cd. -// -// Solidity: function execute(address destination, bytes data) payable returns(bytes) -func (_IGatewayEVM *IGatewayEVMSession) Execute(destination common.Address, data []byte) (*types.Transaction, error) { - return _IGatewayEVM.Contract.Execute(&_IGatewayEVM.TransactOpts, destination, data) -} - -// Execute is a paid mutator transaction binding the contract method 0x1cff79cd. -// -// Solidity: function execute(address destination, bytes data) payable returns(bytes) -func (_IGatewayEVM *IGatewayEVMTransactorSession) Execute(destination common.Address, data []byte) (*types.Transaction, error) { - return _IGatewayEVM.Contract.Execute(&_IGatewayEVM.TransactOpts, destination, data) -} - -// Execute0 is a paid mutator transaction binding the contract method 0x38e22527. +// Execute is a paid mutator transaction binding the contract method 0x38e22527. // // Solidity: function execute((address) messageContext, address destination, bytes data) payable returns(bytes) -func (_IGatewayEVM *IGatewayEVMTransactor) Execute0(opts *bind.TransactOpts, messageContext MessageContext, destination common.Address, data []byte) (*types.Transaction, error) { - return _IGatewayEVM.contract.Transact(opts, "execute0", messageContext, destination, data) +func (_IGatewayEVM *IGatewayEVMTransactor) Execute(opts *bind.TransactOpts, messageContext MessageContext, destination common.Address, data []byte) (*types.Transaction, error) { + return _IGatewayEVM.contract.Transact(opts, "execute", messageContext, destination, data) } -// Execute0 is a paid mutator transaction binding the contract method 0x38e22527. +// Execute is a paid mutator transaction binding the contract method 0x38e22527. // // Solidity: function execute((address) messageContext, address destination, bytes data) payable returns(bytes) -func (_IGatewayEVM *IGatewayEVMSession) Execute0(messageContext MessageContext, destination common.Address, data []byte) (*types.Transaction, error) { - return _IGatewayEVM.Contract.Execute0(&_IGatewayEVM.TransactOpts, messageContext, destination, data) +func (_IGatewayEVM *IGatewayEVMSession) Execute(messageContext MessageContext, destination common.Address, data []byte) (*types.Transaction, error) { + return _IGatewayEVM.Contract.Execute(&_IGatewayEVM.TransactOpts, messageContext, destination, data) } -// Execute0 is a paid mutator transaction binding the contract method 0x38e22527. +// Execute is a paid mutator transaction binding the contract method 0x38e22527. // // Solidity: function execute((address) messageContext, address destination, bytes data) payable returns(bytes) -func (_IGatewayEVM *IGatewayEVMTransactorSession) Execute0(messageContext MessageContext, destination common.Address, data []byte) (*types.Transaction, error) { - return _IGatewayEVM.Contract.Execute0(&_IGatewayEVM.TransactOpts, messageContext, destination, data) +func (_IGatewayEVM *IGatewayEVMTransactorSession) Execute(messageContext MessageContext, destination common.Address, data []byte) (*types.Transaction, error) { + return _IGatewayEVM.Contract.Execute(&_IGatewayEVM.TransactOpts, messageContext, destination, data) } // ExecuteRevert is a paid mutator transaction binding the contract method 0xcb7ba8e5. @@ -370,25 +349,25 @@ func (_IGatewayEVM *IGatewayEVMTransactorSession) ExecuteRevert(destination comm return _IGatewayEVM.Contract.ExecuteRevert(&_IGatewayEVM.TransactOpts, destination, data, revertContext) } -// ExecuteWithERC20 is a paid mutator transaction binding the contract method 0x5131ab59. +// ExecuteWithERC20 is a paid mutator transaction binding the contract method 0x7bbe9afa. // -// Solidity: function executeWithERC20(address token, address to, uint256 amount, bytes data) returns() -func (_IGatewayEVM *IGatewayEVMTransactor) ExecuteWithERC20(opts *bind.TransactOpts, token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _IGatewayEVM.contract.Transact(opts, "executeWithERC20", token, to, amount, data) +// Solidity: function executeWithERC20((address) messageContext, address token, address to, uint256 amount, bytes data) returns() +func (_IGatewayEVM *IGatewayEVMTransactor) ExecuteWithERC20(opts *bind.TransactOpts, messageContext MessageContext, token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _IGatewayEVM.contract.Transact(opts, "executeWithERC20", messageContext, token, to, amount, data) } -// ExecuteWithERC20 is a paid mutator transaction binding the contract method 0x5131ab59. +// ExecuteWithERC20 is a paid mutator transaction binding the contract method 0x7bbe9afa. // -// Solidity: function executeWithERC20(address token, address to, uint256 amount, bytes data) returns() -func (_IGatewayEVM *IGatewayEVMSession) ExecuteWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _IGatewayEVM.Contract.ExecuteWithERC20(&_IGatewayEVM.TransactOpts, token, to, amount, data) +// Solidity: function executeWithERC20((address) messageContext, address token, address to, uint256 amount, bytes data) returns() +func (_IGatewayEVM *IGatewayEVMSession) ExecuteWithERC20(messageContext MessageContext, token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _IGatewayEVM.Contract.ExecuteWithERC20(&_IGatewayEVM.TransactOpts, messageContext, token, to, amount, data) } -// ExecuteWithERC20 is a paid mutator transaction binding the contract method 0x5131ab59. +// ExecuteWithERC20 is a paid mutator transaction binding the contract method 0x7bbe9afa. // -// Solidity: function executeWithERC20(address token, address to, uint256 amount, bytes data) returns() -func (_IGatewayEVM *IGatewayEVMTransactorSession) ExecuteWithERC20(token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { - return _IGatewayEVM.Contract.ExecuteWithERC20(&_IGatewayEVM.TransactOpts, token, to, amount, data) +// Solidity: function executeWithERC20((address) messageContext, address token, address to, uint256 amount, bytes data) returns() +func (_IGatewayEVM *IGatewayEVMTransactorSession) ExecuteWithERC20(messageContext MessageContext, token common.Address, to common.Address, amount *big.Int, data []byte) (*types.Transaction, error) { + return _IGatewayEVM.Contract.ExecuteWithERC20(&_IGatewayEVM.TransactOpts, messageContext, token, to, amount, data) } // RevertWithERC20 is a paid mutator transaction binding the contract method 0xaa0c0fc1. diff --git a/v2/pkg/ireceiverevm.sol/ireceiverevmevents.go b/v2/pkg/ireceiverevm.sol/ireceiverevmevents.go index da5f21cb..e5c77c54 100644 --- a/v2/pkg/ireceiverevm.sol/ireceiverevmevents.go +++ b/v2/pkg/ireceiverevm.sol/ireceiverevmevents.go @@ -39,7 +39,7 @@ type RevertContext struct { // IReceiverEVMEventsMetaData contains all meta data concerning the IReceiverEVMEvents contract. var IReceiverEVMEventsMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedOnCall\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false}]", + ABI: "[{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedOnCall\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false}]", } // IReceiverEVMEventsABI is the input ABI used to generate the binding from. @@ -665,12 +665,14 @@ func (it *IReceiverEVMEventsReceivedOnCallIterator) Close() error { // IReceiverEVMEventsReceivedOnCall represents a ReceivedOnCall event raised by the IReceiverEVMEvents contract. type IReceiverEVMEventsReceivedOnCall struct { - Raw types.Log // Blockchain specific contextual infos + Sender common.Address + Message []byte + Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedOnCall is a free log retrieval operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// FilterReceivedOnCall is a free log retrieval operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_IReceiverEVMEvents *IReceiverEVMEventsFilterer) FilterReceivedOnCall(opts *bind.FilterOpts) (*IReceiverEVMEventsReceivedOnCallIterator, error) { logs, sub, err := _IReceiverEVMEvents.contract.FilterLogs(opts, "ReceivedOnCall") @@ -680,9 +682,9 @@ func (_IReceiverEVMEvents *IReceiverEVMEventsFilterer) FilterReceivedOnCall(opts return &IReceiverEVMEventsReceivedOnCallIterator{contract: _IReceiverEVMEvents.contract, event: "ReceivedOnCall", logs: logs, sub: sub}, nil } -// WatchReceivedOnCall is a free log subscription operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// WatchReceivedOnCall is a free log subscription operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_IReceiverEVMEvents *IReceiverEVMEventsFilterer) WatchReceivedOnCall(opts *bind.WatchOpts, sink chan<- *IReceiverEVMEventsReceivedOnCall) (event.Subscription, error) { logs, sub, err := _IReceiverEVMEvents.contract.WatchLogs(opts, "ReceivedOnCall") @@ -717,9 +719,9 @@ func (_IReceiverEVMEvents *IReceiverEVMEventsFilterer) WatchReceivedOnCall(opts }), nil } -// ParseReceivedOnCall is a log parse operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// ParseReceivedOnCall is a log parse operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_IReceiverEVMEvents *IReceiverEVMEventsFilterer) ParseReceivedOnCall(log types.Log) (*IReceiverEVMEventsReceivedOnCall, error) { event := new(IReceiverEVMEventsReceivedOnCall) if err := _IReceiverEVMEvents.contract.UnpackLog(event, "ReceivedOnCall", log); err != nil { diff --git a/v2/pkg/receiverevm.sol/receiverevm.go b/v2/pkg/receiverevm.sol/receiverevm.go index f2a64c5c..17a8d3bb 100644 --- a/v2/pkg/receiverevm.sol/receiverevm.go +++ b/v2/pkg/receiverevm.sol/receiverevm.go @@ -44,8 +44,8 @@ type RevertContext struct { // ReceiverEVMMetaData contains all meta data concerning the ReceiverEVM contract. var ReceiverEVMMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"fallback\",\"stateMutability\":\"payable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"onCall\",\"inputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"onRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"receiveERC20\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"receiveERC20Partial\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"receiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"receiveNonPayable\",\"inputs\":[{\"name\":\"strs\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"receivePayable\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedOnCall\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAmount\",\"inputs\":[]}]", - Bin: "0x6080604052348015600f57600080fd5b506001600055610e9e806100246000396000f3fe60806040526004361061006e5760003560e01c8063c51316911161004b578063c5131691146100d5578063c9028a36146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a214610077578063676cc054146100975780636ed70169146100c057005b3661007557005b005b34801561008357600080fd5b506100756100923660046106ec565b610148565b6100aa6100a5366004610728565b6101de565b6040516100b79190610823565b60405180910390f35b3480156100cc57600080fd5b50610075610222565b3480156100e157600080fd5b506100756100f03660046106ec565b610257565b34801561010157600080fd5b50610075610110366004610836565b610332565b610075610123366004610996565b61036e565b34801561013457600080fd5b50610075610143366004610a82565b6103b2565b6101506103e7565b61017273ffffffffffffffffffffffffffffffffffffffff831633838661042a565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a1506040805160208101909152600081525b9392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61025f6103e7565b600061026c600285610b6c565b9050806000036102a8576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102ca73ffffffffffffffffffffffffffffffffffffffff841633848461042a565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f689a5a5cb55e795ffe4cd8b419cd3bb0a3373974c54d25f64e734d7388b93e9b3382604051610363929190610bf0565b60405180910390a150565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa33348585856040516103a5959493929190610ce2565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103a59493929190610d6c565b600260005403610423576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104bf9085906104c5565b50505050565b60006104e773ffffffffffffffffffffffffffffffffffffffff841683610560565b9050805160001415801561050c57508080602001905181019061050a9190610e2f565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061021b83836000846000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105939190610e4c565b60006040518083038185875af1925050503d80600081146105d0576040519150601f19603f3d011682016040523d82523d6000602084013e6105d5565b606091505b50915091506105e58683836105ef565b9695505050505050565b606082610604576105ff8261067e565b61021b565b8151158015610628575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610677576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610557565b508061021b565b80511561068e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106e757600080fd5b919050565b60008060006060848603121561070157600080fd5b83359250610711602085016106c3565b915061071f604085016106c3565b90509250925092565b6000806000838503604081121561073e57600080fd5b602081121561074c57600080fd5b50839250602084013567ffffffffffffffff81111561076a57600080fd5b8401601f8101861361077b57600080fd5b803567ffffffffffffffff81111561079257600080fd5b8660208284010111156107a457600080fd5b939660209190910195509293505050565b60005b838110156107d05781810151838201526020016107b8565b50506000910152565b600081518084526107f18160208601602086016107b5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061021b60208301846107d9565b60006020828403121561084857600080fd5b813567ffffffffffffffff81111561085f57600080fd5b82016080818503121561021b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156108e7576108e7610871565b604052919050565b600082601f83011261090057600080fd5b813567ffffffffffffffff81111561091a5761091a610871565b61094b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108a0565b81815284602083860101111561096057600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106c057600080fd5b80356106e78161097d565b6000806000606084860312156109ab57600080fd5b833567ffffffffffffffff8111156109c257600080fd5b6109ce868287016108ef565b9350506020840135915060408401356109e68161097d565b809150509250925092565b600067ffffffffffffffff821115610a0b57610a0b610871565b5060051b60200190565b600082601f830112610a2657600080fd5b8135610a39610a34826109f1565b6108a0565b8082825260208201915060208360051b860101925085831115610a5b57600080fd5b602085015b83811015610a78578035835260209283019201610a60565b5095945050505050565b600080600060608486031215610a9757600080fd5b833567ffffffffffffffff811115610aae57600080fd5b8401601f81018613610abf57600080fd5b8035610acd610a34826109f1565b8082825260208201915060208360051b850101925088831115610aef57600080fd5b602084015b83811015610b3157803567ffffffffffffffff811115610b1357600080fd5b610b228b6020838901016108ef565b84525060209283019201610af4565b509550505050602084013567ffffffffffffffff811115610b5157600080fd5b610b5d86828701610a15565b92505061071f6040850161098b565b600082610ba2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2e836106c3565b16604082015273ffffffffffffffffffffffffffffffffffffffff610c55602084016106c3565b166060820152600080604084013590508060808401525060608301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610ca157600080fd5b830160208101903567ffffffffffffffff811115610cbe57600080fd5b803603821315610ccd57600080fd5b608060a08501526105e560c085018284610ba7565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d1760a08301866107d9565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610d62578151865260209586019590910190600101610d44565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610dff577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610dea8583516107d9565b94506020938401939190910190600101610db0565b505050508281036040840152610e158186610d30565b915050610e26606083018415159052565b95945050505050565b600060208284031215610e4157600080fd5b815161021b8161097d565b60008251610e5e8184602087016107b5565b919091019291505056fea26469706673582212200121b4788f0b35a4b6df21db4f43708a9b20e8b16f616e6f3300230e75bbdd1364736f6c634300081a0033", + ABI: "[{\"type\":\"fallback\",\"stateMutability\":\"payable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"onCall\",\"inputs\":[{\"name\":\"messageContext\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"onRevert\",\"inputs\":[{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"receiveERC20\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"receiveERC20Partial\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"receiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"receiveNonPayable\",\"inputs\":[{\"name\":\"strs\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"receivePayable\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedOnCall\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAmount\",\"inputs\":[]}]", + Bin: "0x6080604052348015600f57600080fd5b506001600055610f06806100246000396000f3fe60806040526004361061006e5760003560e01c8063c51316911161004b578063c5131691146100d5578063c9028a36146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a214610077578063676cc054146100975780636ed70169146100c057005b3661007557005b005b34801561008357600080fd5b50610075610092366004610709565b610148565b6100aa6100a5366004610745565b6101de565b6040516100b79190610840565b60405180910390f35b3480156100cc57600080fd5b5061007561023f565b3480156100e157600080fd5b506100756100f0366004610709565b610274565b34801561010157600080fd5b50610075610110366004610853565b61034f565b6100756101233660046109b3565b61038b565b34801561013457600080fd5b50610075610143366004610a9f565b6103cf565b610150610404565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610447565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b60607fd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a35250161020e6020860186610b89565b848460405161021f93929190610bed565b60405180910390a1506040805160208101909152600081525b9392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61027c610404565b6000610289600285610c26565b9050806000036102c5576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102e773ffffffffffffffffffffffffffffffffffffffff8416338484610447565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f689a5a5cb55e795ffe4cd8b419cd3bb0a3373974c54d25f64e734d7388b93e9b3382604051610380929190610c61565b60405180910390a150565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa33348585856040516103c2959493929190610d53565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103c29493929190610ddd565b600260005403610440576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104dc9085906104e2565b50505050565b600061050473ffffffffffffffffffffffffffffffffffffffff84168361057d565b905080516000141580156105295750808060200190518101906105279190610e97565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061023883836000846000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105b09190610eb4565b60006040518083038185875af1925050503d80600081146105ed576040519150601f19603f3d011682016040523d82523d6000602084013e6105f2565b606091505b509150915061060286838361060c565b9695505050505050565b6060826106215761061c8261069b565b610238565b8151158015610645575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610694576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610574565b5080610238565b8051156106ab5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461070457600080fd5b919050565b60008060006060848603121561071e57600080fd5b8335925061072e602085016106e0565b915061073c604085016106e0565b90509250925092565b6000806000838503604081121561075b57600080fd5b602081121561076957600080fd5b50839250602084013567ffffffffffffffff81111561078757600080fd5b8401601f8101861361079857600080fd5b803567ffffffffffffffff8111156107af57600080fd5b8660208284010111156107c157600080fd5b939660209190910195509293505050565b60005b838110156107ed5781810151838201526020016107d5565b50506000910152565b6000815180845261080e8160208601602086016107d2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061023860208301846107f6565b60006020828403121561086557600080fd5b813567ffffffffffffffff81111561087c57600080fd5b82016080818503121561023857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156109045761090461088e565b604052919050565b600082601f83011261091d57600080fd5b813567ffffffffffffffff8111156109375761093761088e565b61096860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108bd565b81815284602083860101111561097d57600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106dd57600080fd5b80356107048161099a565b6000806000606084860312156109c857600080fd5b833567ffffffffffffffff8111156109df57600080fd5b6109eb8682870161090c565b935050602084013591506040840135610a038161099a565b809150509250925092565b600067ffffffffffffffff821115610a2857610a2861088e565b5060051b60200190565b600082601f830112610a4357600080fd5b8135610a56610a5182610a0e565b6108bd565b8082825260208201915060208360051b860101925085831115610a7857600080fd5b602085015b83811015610a95578035835260209283019201610a7d565b5095945050505050565b600080600060608486031215610ab457600080fd5b833567ffffffffffffffff811115610acb57600080fd5b8401601f81018613610adc57600080fd5b8035610aea610a5182610a0e565b8082825260208201915060208360051b850101925088831115610b0c57600080fd5b602084015b83811015610b4e57803567ffffffffffffffff811115610b3057600080fd5b610b3f8b60208389010161090c565b84525060209283019201610b11565b509550505050602084013567ffffffffffffffff811115610b6e57600080fd5b610b7a86828701610a32565b92505061073c604085016109a8565b600060208284031215610b9b57600080fd5b610238826106e0565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff84168152604060208201526000610c1d604083018486610ba4565b95945050505050565b600082610c5c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c9f836106e0565b16604082015273ffffffffffffffffffffffffffffffffffffffff610cc6602084016106e0565b166060820152600080604084013590508060808401525060608301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610d1257600080fd5b830160208101903567ffffffffffffffff811115610d2f57600080fd5b803603821315610d3e57600080fd5b608060a085015261060260c085018284610ba4565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d8860a08301866107f6565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610dd3578151865260209586019590910190600101610db5565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e70577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e5b8583516107f6565b94506020938401939190910190600101610e21565b505050508281036040840152610e868186610da1565b915050610c1d606083018415159052565b600060208284031215610ea957600080fd5b81516102388161099a565b60008251610ec68184602087016107d2565b919091019291505056fea2646970667358221220a40191c0a0256363e6edb7673accb387b7a3597d9a76c64faccadc4ce57c234664736f6c634300081a0033", } // ReceiverEVMABI is the input ABI used to generate the binding from. @@ -217,23 +217,23 @@ func (_ReceiverEVM *ReceiverEVMTransactorRaw) Transact(opts *bind.TransactOpts, // OnCall is a paid mutator transaction binding the contract method 0x676cc054. // -// Solidity: function onCall((address) , bytes ) payable returns(bytes) -func (_ReceiverEVM *ReceiverEVMTransactor) OnCall(opts *bind.TransactOpts, arg0 MessageContext, arg1 []byte) (*types.Transaction, error) { - return _ReceiverEVM.contract.Transact(opts, "onCall", arg0, arg1) +// Solidity: function onCall((address) messageContext, bytes message) payable returns(bytes) +func (_ReceiverEVM *ReceiverEVMTransactor) OnCall(opts *bind.TransactOpts, messageContext MessageContext, message []byte) (*types.Transaction, error) { + return _ReceiverEVM.contract.Transact(opts, "onCall", messageContext, message) } // OnCall is a paid mutator transaction binding the contract method 0x676cc054. // -// Solidity: function onCall((address) , bytes ) payable returns(bytes) -func (_ReceiverEVM *ReceiverEVMSession) OnCall(arg0 MessageContext, arg1 []byte) (*types.Transaction, error) { - return _ReceiverEVM.Contract.OnCall(&_ReceiverEVM.TransactOpts, arg0, arg1) +// Solidity: function onCall((address) messageContext, bytes message) payable returns(bytes) +func (_ReceiverEVM *ReceiverEVMSession) OnCall(messageContext MessageContext, message []byte) (*types.Transaction, error) { + return _ReceiverEVM.Contract.OnCall(&_ReceiverEVM.TransactOpts, messageContext, message) } // OnCall is a paid mutator transaction binding the contract method 0x676cc054. // -// Solidity: function onCall((address) , bytes ) payable returns(bytes) -func (_ReceiverEVM *ReceiverEVMTransactorSession) OnCall(arg0 MessageContext, arg1 []byte) (*types.Transaction, error) { - return _ReceiverEVM.Contract.OnCall(&_ReceiverEVM.TransactOpts, arg0, arg1) +// Solidity: function onCall((address) messageContext, bytes message) payable returns(bytes) +func (_ReceiverEVM *ReceiverEVMTransactorSession) OnCall(messageContext MessageContext, message []byte) (*types.Transaction, error) { + return _ReceiverEVM.Contract.OnCall(&_ReceiverEVM.TransactOpts, messageContext, message) } // OnRevert is a paid mutator transaction binding the contract method 0xc9028a36. @@ -881,12 +881,14 @@ func (it *ReceiverEVMReceivedOnCallIterator) Close() error { // ReceiverEVMReceivedOnCall represents a ReceivedOnCall event raised by the ReceiverEVM contract. type ReceiverEVMReceivedOnCall struct { - Raw types.Log // Blockchain specific contextual infos + Sender common.Address + Message []byte + Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedOnCall is a free log retrieval operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// FilterReceivedOnCall is a free log retrieval operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_ReceiverEVM *ReceiverEVMFilterer) FilterReceivedOnCall(opts *bind.FilterOpts) (*ReceiverEVMReceivedOnCallIterator, error) { logs, sub, err := _ReceiverEVM.contract.FilterLogs(opts, "ReceivedOnCall") @@ -896,9 +898,9 @@ func (_ReceiverEVM *ReceiverEVMFilterer) FilterReceivedOnCall(opts *bind.FilterO return &ReceiverEVMReceivedOnCallIterator{contract: _ReceiverEVM.contract, event: "ReceivedOnCall", logs: logs, sub: sub}, nil } -// WatchReceivedOnCall is a free log subscription operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// WatchReceivedOnCall is a free log subscription operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_ReceiverEVM *ReceiverEVMFilterer) WatchReceivedOnCall(opts *bind.WatchOpts, sink chan<- *ReceiverEVMReceivedOnCall) (event.Subscription, error) { logs, sub, err := _ReceiverEVM.contract.WatchLogs(opts, "ReceivedOnCall") @@ -933,9 +935,9 @@ func (_ReceiverEVM *ReceiverEVMFilterer) WatchReceivedOnCall(opts *bind.WatchOpt }), nil } -// ParseReceivedOnCall is a log parse operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// ParseReceivedOnCall is a log parse operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_ReceiverEVM *ReceiverEVMFilterer) ParseReceivedOnCall(log types.Log) (*ReceiverEVMReceivedOnCall, error) { event := new(ReceiverEVMReceivedOnCall) if err := _ReceiverEVM.contract.UnpackLog(event, "ReceivedOnCall", log); err != nil { diff --git a/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go b/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go index b0cab310..9bf3ba9a 100644 --- a/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go +++ b/v2/pkg/zetaconnectorbase.sol/zetaconnectorbase.go @@ -29,6 +29,11 @@ var ( _ = abi.ConvertType ) +// MessageContext is an auto generated low-level Go binding around an user-defined struct. +type MessageContext struct { + Sender common.Address +} + // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Sender common.Address @@ -39,7 +44,7 @@ type RevertContext struct { // ZetaConnectorBaseMetaData contains all meta data concerning the ZetaConnectorBase contract. var ZetaConnectorBaseMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"messageContext\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", } // ZetaConnectorBaseABI is the input ABI used to generate the binding from. @@ -801,25 +806,25 @@ func (_ZetaConnectorBase *ZetaConnectorBaseTransactorSession) Withdraw(to common return _ZetaConnectorBase.Contract.Withdraw(&_ZetaConnectorBase.TransactOpts, to, amount, internalSendHash) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x5e3e9fef. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x6fb9a7af. // -// Solidity: function withdrawAndCall(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() -func (_ZetaConnectorBase *ZetaConnectorBaseTransactor) WithdrawAndCall(opts *bind.TransactOpts, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { - return _ZetaConnectorBase.contract.Transact(opts, "withdrawAndCall", to, amount, data, internalSendHash) +// Solidity: function withdrawAndCall((address) messageContext, address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorBase *ZetaConnectorBaseTransactor) WithdrawAndCall(opts *bind.TransactOpts, messageContext MessageContext, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorBase.contract.Transact(opts, "withdrawAndCall", messageContext, to, amount, data, internalSendHash) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x5e3e9fef. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x6fb9a7af. // -// Solidity: function withdrawAndCall(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() -func (_ZetaConnectorBase *ZetaConnectorBaseSession) WithdrawAndCall(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { - return _ZetaConnectorBase.Contract.WithdrawAndCall(&_ZetaConnectorBase.TransactOpts, to, amount, data, internalSendHash) +// Solidity: function withdrawAndCall((address) messageContext, address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorBase *ZetaConnectorBaseSession) WithdrawAndCall(messageContext MessageContext, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorBase.Contract.WithdrawAndCall(&_ZetaConnectorBase.TransactOpts, messageContext, to, amount, data, internalSendHash) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x5e3e9fef. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x6fb9a7af. // -// Solidity: function withdrawAndCall(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() -func (_ZetaConnectorBase *ZetaConnectorBaseTransactorSession) WithdrawAndCall(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { - return _ZetaConnectorBase.Contract.WithdrawAndCall(&_ZetaConnectorBase.TransactOpts, to, amount, data, internalSendHash) +// Solidity: function withdrawAndCall((address) messageContext, address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorBase *ZetaConnectorBaseTransactorSession) WithdrawAndCall(messageContext MessageContext, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorBase.Contract.WithdrawAndCall(&_ZetaConnectorBase.TransactOpts, messageContext, to, amount, data, internalSendHash) } // WithdrawAndRevert is a paid mutator transaction binding the contract method 0x6f8728ad. diff --git a/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go b/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go index b25f471c..8eb3d637 100644 --- a/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go +++ b/v2/pkg/zetaconnectornative.sol/zetaconnectornative.go @@ -29,6 +29,11 @@ var ( _ = abi.ConvertType ) +// MessageContext is an auto generated low-level Go binding around an user-defined struct. +type MessageContext struct { + Sender common.Address +} + // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Sender common.Address @@ -39,8 +44,8 @@ type RevertContext struct { // ZetaConnectorNativeMetaData contains all meta data concerning the ZetaConnectorNative contract. var ZetaConnectorNativeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a060405230608052348015601357600080fd5b5060805161248461003d6000396000818161125d01528181611286015261145c01526124846000f3fe6080604052600436106101965760003560e01c80635e3e9fef116100e1578063950837aa1161008a578063ad3cb1cc11610064578063ad3cb1cc146104f2578063d547741f14610548578063e63ab1e914610568578063f8c8765e1461059c57600080fd5b8063950837aa14610489578063a217fddf146104a9578063a783c789146104be57600080fd5b80638456cb59116100bb5780638456cb59146103db57806385f438c1146103f057806391d148541461042457600080fd5b80635e3e9fef1461037b5780636f8728ad1461039b578063743e0c9b146103bb57600080fd5b806336568abe1161014357806352d1902d1161011d57806352d1902d1461030f5780635b112591146103245780635c975abb1461034457600080fd5b806336568abe146102c75780633f4ba83a146102e75780634f1ef286146102fc57600080fd5b806321e093b11161017457806321e093b11461022a578063248a9ca31461024a5780632f2ff15d146102a757600080fd5b806301ffc9a71461019b578063106e6290146101d0578063116191b6146101f2575b600080fd5b3480156101a757600080fd5b506101bb6101b6366004611dea565b6105bc565b60405190151581526020015b60405180910390f35b3480156101dc57600080fd5b506101f06101eb366004611e48565b610655565b005b3480156101fe57600080fd5b50600054610212906001600160a01b031681565b6040516001600160a01b0390911681526020016101c7565b34801561023657600080fd5b50600154610212906001600160a01b031681565b34801561025657600080fd5b50610299610265366004611e7b565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101c7565b3480156102b357600080fd5b506101f06102c2366004611e94565b610718565b3480156102d357600080fd5b506101f06102e2366004611e94565b610762565b3480156102f357600080fd5b506101f06107ae565b6101f061030a366004611eef565b6107e3565b34801561031b57600080fd5b50610299610802565b34801561033057600080fd5b50600254610212906001600160a01b031681565b34801561035057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101bb565b34801561038757600080fd5b506101f061039636600461203f565b610831565b3480156103a757600080fd5b506101f06103b63660046120a1565b610985565b3480156103c757600080fd5b506101f06103d6366004611e7b565b610ade565b3480156103e757600080fd5b506101f0610afe565b3480156103fc57600080fd5b506102997f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561043057600080fd5b506101bb61043f366004611e94565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561049557600080fd5b506101f06104a4366004612139565b610b30565b3480156104b557600080fd5b50610299600081565b3480156104ca57600080fd5b506102997f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156104fe57600080fd5b5061053b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101c79190612178565b34801561055457600080fd5b506101f0610563366004611e94565b610cc3565b34801561057457600080fd5b506102997f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105a857600080fd5b506101f06105b73660046121c9565b610d07565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061064f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61065d610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461068781610f0f565b61068f610f19565b6001546106a6906001600160a01b03168585610f77565b836001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5846040516106e191815260200190565b60405180910390a25061071360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461075281610f0f565b61075c8383611011565b50505050565b6001600160a01b03811633146107a4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61071382826110fe565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107d881610f0f565b6107e06111c2565b50565b6107eb611252565b6107f482611322565b6107fe828261132d565b5050565b600061080c611451565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610839610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461086381610f0f565b61086b610f19565b600054600154610888916001600160a01b03918216911687610f77565b6000546001546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692635131ab59926108dd929116908a908a908a908a90600401612266565b600060405180830381600087803b1580156108f757600080fd5b505af115801561090b573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d86868660405161094c939291906122a9565b60405180910390a25061097e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b61098d610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109b781610f0f565b6109bf610f19565b6000546001546109dc916001600160a01b03918216911688610f77565b6000546001546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263aa0c0fc192610a33929116908b908b908b908b908a90600401612374565b600060405180830381600087803b158015610a4d57600080fd5b505af1158015610a61573d6000803e3d6000fd5b50505050866001600160a01b03167f5272d2fee39bff41b2e763562526315906046373ce08a7bacf76c3080d731ff087878786604051610aa494939291906123cb565b60405180910390a250610ad660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b610ae6610f19565b6001546107e0906001600160a01b03163330846114b3565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b2881610f0f565b6107e06114ec565b6000610b3b81610f0f565b6001600160a01b038216610b7b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610bb2907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166110fe565b50600254610bea907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166110fe565b50610c157f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483611011565b50610c407f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83611011565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610cfd81610f0f565b61075c83836110fe565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d525750825b905060008267ffffffffffffffff166001148015610d6f5750303b155b905081158015610d7d575080155b15610db4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610e155784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610e2189898989611565565b8315610e835784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01610f09576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6107e08133611870565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610f75576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261071391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506118fd565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166110f4576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556110aa3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061064f565b600091505061064f565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156110f4576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061064f565b6111ca611979565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806112eb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112df7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610f75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107fe81610f0f565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113a5575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526113a2918101906123f7565b60015b6113eb576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611447576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016113e2565b61071383836119d4565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b03848116602483015283811660448301526064820183905261075c9186918216906323b872dd90608401610fa4565b6114f4610f19565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611234565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115b05750825b905060008267ffffffffffffffff1660011480156115cd5750303b155b9050811580156115db575080155b15611612576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116735784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061169057506001600160a01b038816155b806116a257506001600160a01b038716155b806116b457506001600160a01b038616155b156116eb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116f3611a2a565b6116fb611a32565b611703611a2a565b61170b611a42565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b16919092161790556117669087611011565b506117917f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e488611011565b506117bc7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb88611011565b506117e77f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611011565b506118127f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a88611011565b508315610e835784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610e7a565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166107fe576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016113e2565b60006119126001600160a01b03841683611a52565b905080516000141580156119375750808060200190518101906119359190612410565b155b15610713576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016113e2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610f75576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119dd82611a67565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611a22576107138282611b0f565b6107fe611b85565b610f75611bbd565b611a3a611bbd565b610f75611c24565b611a4a611bbd565b610f75611c2c565b6060611a6083836000611c7d565b9392505050565b806001600160a01b03163b600003611ab6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016113e2565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611b2c9190612432565b600060405180830381855af49150503d8060008114611b67576040519150601f19603f3d011682016040523d82523d6000602084013e611b6c565b606091505b5091509150611b7c858383611d33565b95945050505050565b3415610f75576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610f75576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610feb611bbd565b611c34611bbd565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606081471015611cbb576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016113e2565b600080856001600160a01b03168486604051611cd79190612432565b60006040518083038185875af1925050503d8060008114611d14576040519150601f19603f3d011682016040523d82523d6000602084013e611d19565b606091505b5091509150611d29868383611d33565b9695505050505050565b606082611d4857611d4382611da8565b611a60565b8151158015611d5f57506001600160a01b0384163b155b15611da1576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016113e2565b5080611a60565b805115611db85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611dfc57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611a6057600080fd5b80356001600160a01b0381168114611e4357600080fd5b919050565b600080600060608486031215611e5d57600080fd5b611e6684611e2c565b95602085013595506040909401359392505050565b600060208284031215611e8d57600080fd5b5035919050565b60008060408385031215611ea757600080fd5b82359150611eb760208401611e2c565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611f0257600080fd5b611f0b83611e2c565b9150602083013567ffffffffffffffff811115611f2757600080fd5b8301601f81018513611f3857600080fd5b803567ffffffffffffffff811115611f5257611f52611ec0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715611fbe57611fbe611ec0565b604052818152828201602001871015611fd657600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008083601f84011261200857600080fd5b50813567ffffffffffffffff81111561202057600080fd5b60208301915083602082850101111561203857600080fd5b9250929050565b60008060008060006080868803121561205757600080fd5b61206086611e2c565b945060208601359350604086013567ffffffffffffffff81111561208357600080fd5b61208f88828901611ff6565b96999598509660600135949350505050565b60008060008060008060a087890312156120ba57600080fd5b6120c387611e2c565b955060208701359450604087013567ffffffffffffffff8111156120e657600080fd5b6120f289828a01611ff6565b90955093505060608701359150608087013567ffffffffffffffff81111561211957600080fd5b87016080818a03121561212b57600080fd5b809150509295509295509295565b60006020828403121561214b57600080fd5b611a6082611e2c565b60005b8381101561216f578181015183820152602001612157565b50506000910152565b6020815260008251806020840152612197816040850160208701612154565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080600080608085870312156121df57600080fd5b6121e885611e2c565b93506121f660208601611e2c565b925061220460408601611e2c565b915061221260608601611e2c565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061229e60808301848661221d565b979650505050505050565b838152604060208201526000611b7c60408301848661221d565b6001600160a01b036122d482611e2c565b1682526001600160a01b036122eb60208301611e2c565b1660208301526040818101359083015260006060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261233357600080fd5b820160208101903567ffffffffffffffff81111561235057600080fd5b80360382131561235f57600080fd5b60806060860152611b7c60808601828461221d565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006123ac60a08301858761221d565b82810360808401526123be81856122c3565b9998505050505050505050565b8481526060602082015260006123e560608301858761221d565b828103604084015261229e81856122c3565b60006020828403121561240957600080fd5b5051919050565b60006020828403121561242257600080fd5b81518015158114611a6057600080fd5b60008251612444818460208701612154565b919091019291505056fea26469706673582212204ec109dc2211b9bb584bcf097d6201f1b7f8e8c32266e62be879ded339e643b164736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"messageContext\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a060405230608052348015601357600080fd5b5060805161248e61003d60003960008181611227015281816112500152611426015261248e6000f3fe6080604052600436106101965760003560e01c80636f8728ad116100e1578063950837aa1161008a578063ad3cb1cc11610064578063ad3cb1cc146104f2578063d547741f14610548578063e63ab1e914610568578063f8c8765e1461059c57600080fd5b8063950837aa14610489578063a217fddf146104a9578063a783c789146104be57600080fd5b80638456cb59116100bb5780638456cb59146103db57806385f438c1146103f057806391d148541461042457600080fd5b80636f8728ad1461037b5780636fb9a7af1461039b578063743e0c9b146103bb57600080fd5b806336568abe1161014357806352d1902d1161011d57806352d1902d1461030f5780635b112591146103245780635c975abb1461034457600080fd5b806336568abe146102c75780633f4ba83a146102e75780634f1ef286146102fc57600080fd5b806321e093b11161017457806321e093b11461022a578063248a9ca31461024a5780632f2ff15d146102a757600080fd5b806301ffc9a71461019b578063106e6290146101d0578063116191b6146101f2575b600080fd5b3480156101a757600080fd5b506101bb6101b6366004611db4565b6105bc565b60405190151581526020015b60405180910390f35b3480156101dc57600080fd5b506101f06101eb366004611e12565b610655565b005b3480156101fe57600080fd5b50600054610212906001600160a01b031681565b6040516001600160a01b0390911681526020016101c7565b34801561023657600080fd5b50600154610212906001600160a01b031681565b34801561025657600080fd5b50610299610265366004611e45565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101c7565b3480156102b357600080fd5b506101f06102c2366004611e5e565b610718565b3480156102d357600080fd5b506101f06102e2366004611e5e565b610762565b3480156102f357600080fd5b506101f06107ae565b6101f061030a366004611eb9565b6107e3565b34801561031b57600080fd5b50610299610802565b34801561033057600080fd5b50600254610212906001600160a01b031681565b34801561035057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101bb565b34801561038757600080fd5b506101f0610396366004612009565b610831565b3480156103a757600080fd5b506101f06103b63660046120a1565b61098a565b3480156103c757600080fd5b506101f06103d6366004611e45565b610aa8565b3480156103e757600080fd5b506101f0610ac8565b3480156103fc57600080fd5b506102997f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561043057600080fd5b506101bb61043f366004611e5e565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561049557600080fd5b506101f06104a4366004612120565b610afa565b3480156104b557600080fd5b50610299600081565b3480156104ca57600080fd5b506102997f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156104fe57600080fd5b5061053b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101c7919061215f565b34801561055457600080fd5b506101f0610563366004611e5e565b610c8d565b34801561057457600080fd5b506102997f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105a857600080fd5b506101f06105b73660046121b0565b610cd1565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061064f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61065d610e58565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461068781610ed9565b61068f610ee3565b6001546106a6906001600160a01b03168585610f41565b836001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5846040516106e191815260200190565b60405180910390a25061071360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461075281610ed9565b61075c8383610fdb565b50505050565b6001600160a01b03811633146107a4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61071382826110c8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107d881610ed9565b6107e061118c565b50565b6107eb61121c565b6107f4826112ec565b6107fe82826112f7565b5050565b600061080c61141b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610839610e58565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461086381610ed9565b61086b610ee3565b600054600154610888916001600160a01b03918216911688610f41565b6000546001546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263aa0c0fc1926108df929116908b908b908b908b908a906004016122fe565b600060405180830381600087803b1580156108f957600080fd5b505af115801561090d573d6000803e3d6000fd5b50505050866001600160a01b03167f5272d2fee39bff41b2e763562526315906046373ce08a7bacf76c3080d731ff0878787866040516109509493929190612355565b60405180910390a25061098260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b610992610e58565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109bc81610ed9565b6109c4610ee3565b6000546001546109e1916001600160a01b03918216911687610f41565b6000546001546040517f7bbe9afa0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692637bbe9afa92610a39928c92909116908b908b908b908b9060040161238c565b600060405180830381600087803b158015610a5357600080fd5b505af1158015610a67573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d868686604051610950939291906123e7565b610ab0610ee3565b6001546107e0906001600160a01b031633308461147d565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610af281610ed9565b6107e06114b6565b6000610b0581610ed9565b6001600160a01b038216610b45576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610b7c907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166110c8565b50600254610bb4907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166110c8565b50610bdf7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610fdb565b50610c0a7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610fdb565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610cc781610ed9565b61075c83836110c8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d1c5750825b905060008267ffffffffffffffff166001148015610d395750303b155b905081158015610d47575080155b15610d7e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610ddf5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610deb8989898961152f565b8315610e4d5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01610ed3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6107e0813361183a565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610f3f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261071391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506118c7565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166110be576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556110743390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061064f565b600091505061064f565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156110be576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061064f565b611194611943565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806112b557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112a97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610f3f576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107fe81610ed9565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561136f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261136c91810190612401565b60015b6113b5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611411576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016113ac565b610713838361199e565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f3f576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b03848116602483015283811660448301526064820183905261075c9186918216906323b872dd90608401610f6e565b6114be610ee3565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336111fe565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561157a5750825b905060008267ffffffffffffffff1660011480156115975750303b155b9050811580156115a5575080155b156115dc576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561163d5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061165a57506001600160a01b038816155b8061166c57506001600160a01b038716155b8061167e57506001600160a01b038616155b156116b5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116bd6119f4565b6116c56119fc565b6116cd6119f4565b6116d5611a0c565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b16919092161790556117309087610fdb565b5061175b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e488610fdb565b506117867f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb88610fdb565b506117b17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87610fdb565b506117dc7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a88610fdb565b508315610e4d5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610e44565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166107fe576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016113ac565b60006118dc6001600160a01b03841683611a1c565b905080516000141580156119015750808060200190518101906118ff919061241a565b155b15610713576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016113ac565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610f3f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119a782611a31565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156119ec576107138282611ad9565b6107fe611b4f565b610f3f611b87565b611a04611b87565b610f3f611bee565b611a14611b87565b610f3f611bf6565b6060611a2a83836000611c47565b9392505050565b806001600160a01b03163b600003611a80576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016113ac565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611af6919061243c565b600060405180830381855af49150503d8060008114611b31576040519150601f19603f3d011682016040523d82523d6000602084013e611b36565b606091505b5091509150611b46858383611cfd565b95945050505050565b3415610f3f576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610f3f576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fb5611b87565b611bfe611b87565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606081471015611c85576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016113ac565b600080856001600160a01b03168486604051611ca1919061243c565b60006040518083038185875af1925050503d8060008114611cde576040519150601f19603f3d011682016040523d82523d6000602084013e611ce3565b606091505b5091509150611cf3868383611cfd565b9695505050505050565b606082611d1257611d0d82611d72565b611a2a565b8151158015611d2957506001600160a01b0384163b155b15611d6b576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016113ac565b5080611a2a565b805115611d825780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611dc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611a2a57600080fd5b80356001600160a01b0381168114611e0d57600080fd5b919050565b600080600060608486031215611e2757600080fd5b611e3084611df6565b95602085013595506040909401359392505050565b600060208284031215611e5757600080fd5b5035919050565b60008060408385031215611e7157600080fd5b82359150611e8160208401611df6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611ecc57600080fd5b611ed583611df6565b9150602083013567ffffffffffffffff811115611ef157600080fd5b8301601f81018513611f0257600080fd5b803567ffffffffffffffff811115611f1c57611f1c611e8a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715611f8857611f88611e8a565b604052818152828201602001871015611fa057600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008083601f840112611fd257600080fd5b50813567ffffffffffffffff811115611fea57600080fd5b60208301915083602082850101111561200257600080fd5b9250929050565b60008060008060008060a0878903121561202257600080fd5b61202b87611df6565b955060208701359450604087013567ffffffffffffffff81111561204e57600080fd5b61205a89828a01611fc0565b90955093505060608701359150608087013567ffffffffffffffff81111561208157600080fd5b87016080818a03121561209357600080fd5b809150509295509295509295565b60008060008060008086880360a08112156120bb57600080fd5b60208112156120c957600080fd5b508695506120d960208801611df6565b945060408701359350606087013567ffffffffffffffff8111156120fc57600080fd5b61210889828a01611fc0565b979a9699509497949695608090950135949350505050565b60006020828403121561213257600080fd5b611a2a82611df6565b60005b8381101561215657818101518382015260200161213e565b50506000910152565b602081526000825180602084015261217e81604085016020870161213b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080600080608085870312156121c657600080fd5b6121cf85611df6565b93506121dd60208601611df6565b92506121eb60408601611df6565b91506121f960608601611df6565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b0361225e82611df6565b1682526001600160a01b0361227560208301611df6565b1660208301526040818101359083015260006060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126122bd57600080fd5b820160208101903567ffffffffffffffff8111156122da57600080fd5b8036038213156122e957600080fd5b60806060860152611b46608086018284612204565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061233660a083018587612204565b8281036080840152612348818561224d565b9998505050505050505050565b84815260606020820152600061236f606083018587612204565b8281036040840152612381818561224d565b979650505050505050565b6001600160a01b0361239d88611df6565b1681526001600160a01b03861660208201526001600160a01b038516604082015283606082015260a0608082015260006123db60a083018486612204565b98975050505050505050565b838152604060208201526000611b46604083018486612204565b60006020828403121561241357600080fd5b5051919050565b60006020828403121561242c57600080fd5b81518015158114611a2a57600080fd5b6000825161244e81846020870161213b565b919091019291505056fea2646970667358221220bdc5a55fc0068a2b168bde263209717fe01ad50ad630dffa604561626eca9bb164736f6c634300081a0033", } // ZetaConnectorNativeABI is the input ABI used to generate the binding from. @@ -823,25 +828,25 @@ func (_ZetaConnectorNative *ZetaConnectorNativeTransactorSession) Withdraw(to co return _ZetaConnectorNative.Contract.Withdraw(&_ZetaConnectorNative.TransactOpts, to, amount, arg2) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x5e3e9fef. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x6fb9a7af. // -// Solidity: function withdrawAndCall(address to, uint256 amount, bytes data, bytes32 ) returns() -func (_ZetaConnectorNative *ZetaConnectorNativeTransactor) WithdrawAndCall(opts *bind.TransactOpts, to common.Address, amount *big.Int, data []byte, arg3 [32]byte) (*types.Transaction, error) { - return _ZetaConnectorNative.contract.Transact(opts, "withdrawAndCall", to, amount, data, arg3) +// Solidity: function withdrawAndCall((address) messageContext, address to, uint256 amount, bytes data, bytes32 ) returns() +func (_ZetaConnectorNative *ZetaConnectorNativeTransactor) WithdrawAndCall(opts *bind.TransactOpts, messageContext MessageContext, to common.Address, amount *big.Int, data []byte, arg4 [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNative.contract.Transact(opts, "withdrawAndCall", messageContext, to, amount, data, arg4) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x5e3e9fef. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x6fb9a7af. // -// Solidity: function withdrawAndCall(address to, uint256 amount, bytes data, bytes32 ) returns() -func (_ZetaConnectorNative *ZetaConnectorNativeSession) WithdrawAndCall(to common.Address, amount *big.Int, data []byte, arg3 [32]byte) (*types.Transaction, error) { - return _ZetaConnectorNative.Contract.WithdrawAndCall(&_ZetaConnectorNative.TransactOpts, to, amount, data, arg3) +// Solidity: function withdrawAndCall((address) messageContext, address to, uint256 amount, bytes data, bytes32 ) returns() +func (_ZetaConnectorNative *ZetaConnectorNativeSession) WithdrawAndCall(messageContext MessageContext, to common.Address, amount *big.Int, data []byte, arg4 [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNative.Contract.WithdrawAndCall(&_ZetaConnectorNative.TransactOpts, messageContext, to, amount, data, arg4) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x5e3e9fef. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x6fb9a7af. // -// Solidity: function withdrawAndCall(address to, uint256 amount, bytes data, bytes32 ) returns() -func (_ZetaConnectorNative *ZetaConnectorNativeTransactorSession) WithdrawAndCall(to common.Address, amount *big.Int, data []byte, arg3 [32]byte) (*types.Transaction, error) { - return _ZetaConnectorNative.Contract.WithdrawAndCall(&_ZetaConnectorNative.TransactOpts, to, amount, data, arg3) +// Solidity: function withdrawAndCall((address) messageContext, address to, uint256 amount, bytes data, bytes32 ) returns() +func (_ZetaConnectorNative *ZetaConnectorNativeTransactorSession) WithdrawAndCall(messageContext MessageContext, to common.Address, amount *big.Int, data []byte, arg4 [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNative.Contract.WithdrawAndCall(&_ZetaConnectorNative.TransactOpts, messageContext, to, amount, data, arg4) } // WithdrawAndRevert is a paid mutator transaction binding the contract method 0x6f8728ad. diff --git a/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go b/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go index 8ce64ad0..8f5198a7 100644 --- a/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go +++ b/v2/pkg/zetaconnectornative.t.sol/zetaconnectornativetest.go @@ -66,8 +66,8 @@ type StdInvariantFuzzSelector struct { // ZetaConnectorNativeTestMetaData contains all meta data concerning the ZetaConnectorNativeTest contract. var ZetaConnectorNativeTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testTSSUpgrade\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfSenderIsNotTSSUpdater\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpgradeAndWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedOnCall\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061d0368061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063a217fddf11610104578063ccb0e3f2116100a2578063e20c9f7111610071578063e20c9f7114610357578063e63ab1e91461035f578063fa7626d414610386578063fe574f841461039357600080fd5b8063ccb0e3f214610337578063d509b16c1461033f578063dcf7d03714610347578063de1cb76c1461034f57600080fd5b8063b0464fdc116100de578063b0464fdc14610307578063b5508aa91461030f578063ba414fa614610317578063c19099721461032f57600080fd5b8063a217fddf146102d0578063a783c789146102d8578063af298bb1146102ff57600080fd5b8063493465581161017c578063828320141161014b578063828320141461026957806385226c811461027157806385f438c114610286578063916a17c6146102bb57600080fd5b8063493465581461023c5780634df42da11461024457806352ff59391461024c57806366d9a9a01461025457600080fd5b80632ade3880116101b85780632ade38801461020f5780633cba0107146102245780633e5e3c231461022c5780633f7286f41461023457600080fd5b8063070f2ad0146101df5780630a9254e4146101e95780631ed7831c146101f1575b600080fd5b6101e761039b565b005b6101e761059b565b6101f9610dec565b6040516102069190619b1c565b60405180910390f35b610217610e4e565b6040516102069190619bb8565b6101e7610f90565b6101f9611753565b6101f96117b3565b6101e7611813565b6101e7611e57565b6101e7611fc7565b61025c612816565b6040516102069190619d1e565b6101e7612998565b610279612bf8565b6040516102069190619dbc565b6102ad7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b604051908152602001610206565b6102c3612cc8565b6040516102069190619e33565b6102ad600081565b6102ad7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101e7612dc3565b6102c361320f565b61027961330a565b61031f6133da565b6040519015158152602001610206565b6101e76134ae565b6101e761371e565b6101e7614244565b6101e7614282565b6101e761492c565b6101f9614f89565b6102ad7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f5461031f9060ff1681565b6101e7614fe9565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561040d57600080fd5b505af1158015610421573d6000803e3d6000fd5b5050602654604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506104ed9190600401619eca565b600060405180830381600087803b15801561050757600080fd5b505af115801561051b573d6000803e3d6000fd5b5050602254602480546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529216935063950837aa9250015b600060405180830381600087803b15801561058157600080fd5b505af1158015610595573d6000803e3d6000fd5b50505050565b602480547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602580548216611234179055602680548216615678179055602780549091166198761790556040516105f990619a49565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f08015801561067d573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526026546024805493519186169082015260448101939093529216606482015260009161076f916084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052615202565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0384811682029290921792839055604080518082018252601081527f4552433230437573746f64792e736f6c000000000000000000000000000000006020820152602654602480549351949096048516958401959095529383166044830152909116606482015291925061081591608401610712565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691909117909155604080518082018252601781527f5a657461436f6e6e6563746f724e61746976652e736f6c0000000000000000006020820152601f5460235460265460248054955161010090940487169084015290851660448301528416606482015291909216608482015291925061091a9160a40160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff8c8765e00000000000000000000000000000000000000000000000000000000179052615202565b602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03831617905560405190915061095c90619a56565b604051809103906000f080158015610978573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556026546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a2457600080fd5b505af1158015610a38573d6000803e3d6000fd5b5050602480546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d93506306447d56925001600060405180830381600087803b158015610aad57600080fd5b505af1158015610ac1573d6000803e3d6000fd5b5050601f546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f9150602401600060405180830381600087803b158015610b2c57600080fd5b505af1158015610b40573d6000803e3d6000fd5b5050601f546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef9150602401600060405180830381600087803b158015610bab57600080fd5b505af1158015610bbf573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c2157600080fd5b505af1158015610c35573d6000803e3d6000fd5b50506023546022546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152624c4b406024820152911692506340c10f199150604401600060405180830381600087803b158015610ca457600080fd5b505af1158015610cb8573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d3c57600080fd5b505af1158015610d50573d6000803e3d6000fd5b5050604080516080810182526024546001600160a01b039081168252602354811660208084019182526001848601908152855191820190955260008152606084018190528351602880549185167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178155925160298054919095169116179092559251602a55909350909150602b906105959082619fa5565b60606016805480602002602001604051908101604052809291908181526020018280548015610e4457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e26575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610f8757600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610f70578382906000526020600020018054610ee390619f0c565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0f90619f0c565b8015610f5c5780601f10610f3157610100808354040283529160200191610f5c565b820191906000526020600020905b815481529060010190602001808311610f3f57829003601f168201915b505050505081526020019060010190610ec4565b505050508152505081526020019060010190610e72565b50505050905090565b602354602554604051620186a0602482018190526001600160a01b039384166044830152929091166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260235460255491516370a0823160e01b81526001600160a01b0392831660048201529293506000929116906370a0823190602401602060405180830381865afa15801561106e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611092919061a064565b905061109f816000615221565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156110f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611114919061a064565b601f54604080516001600160a01b036101009093048316602482015260448082018a905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926111ef92911690600090869060040161a07d565b600060405180830381600087803b15801561120957600080fd5b505af115801561121d573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156112af57600080fd5b505af11580156112c3573d6000803e3d6000fd5b5050601f54602354602554604080516101009094046001600160a01b039081168552602085018d9052928316908401521660608201527f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609250608001905060405180910390a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156113b757600080fd5b505af11580156113cb573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d9150611410908990889061a0a5565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561147157600080fd5b505af1158015611485573d6000803e3d6000fd5b50506022546020546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506114dd92909116908a9089908b9060040161a0be565b600060405180830381600087803b1580156114f757600080fd5b505af115801561150b573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa15801561155f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611583919061a064565b905061158f8188615221565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156115e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611604919061a064565b9050611619816116148a8761a126565b615221565b602354601f546020546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b0390811660048401529081166024830152600092169063dd62ed3e90604401602060405180830381865afa158015611691573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b5919061a064565b90506116c2816000615221565b602354601f546040516370a0823160e01b81526101009091046001600160a01b03908116600483015260009216906370a0823190602401602060405180830381865afa158015611716573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173a919061a064565b9050611747816000615221565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610e44576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610e26575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610e44576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610e26575050505050905090565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905260235460255493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a08231936118b593921691016001600160a01b0391909116815260200190565b602060405180830381865afa1580156118d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f6919061a064565b9050611903816000615221565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611954573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611978919061a064565b601f54604080516001600160a01b036101009093048316602482015260448082018a905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611a5392911690600090869060040161a07d565b600060405180830381600087803b158015611a6d57600080fd5b505af1158015611a81573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611b1357600080fd5b505af1158015611b27573d6000803e3d6000fd5b5050601f546040516101009091046001600160a01b031681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09250602001905060405180910390a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611bfe57600080fd5b505af1158015611c12573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d9150611c57908990889061a0a5565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611cb857600080fd5b505af1158015611ccc573d6000803e3d6000fd5b50506022546020546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611d2492909116908a9089908b9060040161a0be565b600060405180830381600087803b158015611d3e57600080fd5b505af1158015611d52573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc9919061a064565b9050611dd6816000615221565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4b919061a064565b90506116198185615221565b602480546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b158015611ec857600080fd5b505af1158015611edc573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015611f6557600080fd5b505af1158015611f79573d6000803e3d6000fd5b50506022546040517f950837aa000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063950837aa9150602401610567565b6022546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4600482015261432160248201819052916000916001600160a01b03909116906391d1485490604401602060405180830381865afa158015612056573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207a919061a139565b9050612085816152a1565b6022546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b03848116602483015260009216906391d1485490604401602060405180830381865afa15801561210f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612133919061a139565b905061213e816152a1565b6022546026546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b03918216602482015260009291909116906391d1485490604401602060405180830381865afa1580156121ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f2919061a139565b90506121fd8161531b565b6022546026546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b03918216602482015260009291909116906391d1485490604401602060405180830381865afa15801561228d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b1919061a139565b90506122bc8161531b565b602480546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b15801561232d57600080fd5b505af1158015612341573d6000803e3d6000fd5b50506022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156123d357600080fd5b505af11580156123e7573d6000803e3d6000fd5b5050602654604080516001600160a01b03928316815291891660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e935001905060405180910390a16022546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b0387811660048301529091169063950837aa90602401600060405180830381600087803b15801561249357600080fd5b505af11580156124a7573d6000803e3d6000fd5b5050505061252b85602260009054906101000a90046001600160a01b03166001600160a01b0316635b1125916040518163ffffffff1660e01b8152600401602060405180830381865afa158015612502573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612526919061a15b565b61536d565b6022546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b038781166024830152909116906391d1485490604401602060405180830381865afa1580156125b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d8919061a139565b93506125e38461531b565b6022546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b038781166024830152909116906391d1485490604401602060405180830381865afa15801561266c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612690919061a139565b925061269b8361531b565b6022546026546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b0391821660248201529116906391d1485490604401602060405180830381865afa158015612726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274a919061a139565b9150612755826152a1565b6022546026546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b0391821660248201529116906391d1485490604401602060405180830381865afa1580156127e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612804919061a139565b905061280f816152a1565b5050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610f87578382906000526020600020906002020160405180604001604052908160008201805461286d90619f0c565b80601f016020809104026020016040519081016040528092919081815260200182805461289990619f0c565b80156128e65780601f106128bb576101008083540402835291602001916128e6565b820191906000526020600020905b8154815290600101906020018083116128c957829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561298057602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161292d5790505b5050505050815250508152602001906001019061283a565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f19018152908290526024805463ca669fa760e01b84526001600160a01b03166004840152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b158015612a3557600080fd5b505af1158015612a49573d6000803e3d6000fd5b505060248054604080516001600160a01b03909216928201929092527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612b389190600401619eca565b600060405180830381600087803b158015612b5257600080fd5b505af1158015612b66573d6000803e3d6000fd5b50506022546020546040517f6f8728ad0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450636f8728ad9350612bc1929091169087908690889060289060040161a261565b600060405180830381600087803b158015612bdb57600080fd5b505af1158015612bef573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610f87578382906000526020600020018054612c3b90619f0c565b80601f0160208091040260200160405190810160405280929190818152602001828054612c6790619f0c565b8015612cb45780601f10612c8957610100808354040283529160200191612cb4565b820191906000526020600020905b815481529060010190602001808311612c9757829003601f168201915b505050505081526020019060010190612c1c565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610f875760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612dab57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612d585790505b50505050508152505081526020019060010190612cec565b602280546040805160608101909152828152612e0d926001600160a01b039092169161cfdf60208301396040805160208101909152600081526024546001600160a01b03166153ce565b6022546023546025546040516370a0823160e01b81526001600160a01b03918216600482015292811692620186a09260009283929116906370a0823190602401602060405180830381865afa158015612e6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e8e919061a064565b9050612e9b816000615221565b6025546040516001600160a01b0390911660248201526044810184905260009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612f7b916001600160a01b039190911690600090869060040161a07d565b600060405180830381600087803b158015612f9557600080fd5b505af1158015612fa9573d6000803e3d6000fd5b50506040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0388166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561303757600080fd5b505af115801561304b573d6000803e3d6000fd5b50506025546040518781526001600160a01b0390911692507f3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee9915060200160405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156130ea57600080fd5b505af11580156130fe573d6000803e3d6000fd5b50506025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810188905260448101879052908816925063106e62909150606401600060405180830381600087803b15801561317057600080fd5b505af1158015613184573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156131d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fb919061a064565b90506132078186615221565b505050505050565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610f875760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156132f257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161329f5790505b50505050508152505081526020019060010190613233565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610f8757838290600052602060002001805461334d90619f0c565b80601f016020809104026020016040519081016040528092919081815260200182805461337990619f0c565b80156133c65780601f1061339b576101008083540402835291602001916133c6565b820191906000526020600020905b8154815290600101906020018083116133a957829003601f168201915b50505050508152602001906001019061332e565b60085460009060ff16156133f2575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134a7919061a064565b1415905090565b602354602554604051620186a0602482018190526001600160a01b039384166044830152929091166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260248054915163ca669fa760e01b81526001600160a01b039092166004830152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b15801561359557600080fd5b505af11580156135a9573d6000803e3d6000fd5b505060248054604080516001600160a01b03909216928201929092527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506136989190600401619eca565b600060405180830381600087803b1580156136b257600080fd5b505af11580156136c6573d6000803e3d6000fd5b50506022546020546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350612bc1929091169087908690889060040161a0be565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561377f57600080fd5b505af1158015613793573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061387e9190600401619eca565b600060405180830381600087803b15801561389857600080fd5b505af11580156138ac573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561390057600080fd5b505af1158015613914573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561397157600080fd5b505af1158015613985573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613a709190600401619eca565b600060405180830381600087803b158015613a8a57600080fd5b505af1158015613a9e573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613af257600080fd5b505af1158015613b06573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613b6357600080fd5b505af1158015613b77573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613bcb57600080fd5b505af1158015613bdf573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613c6857600080fd5b505af1158015613c7c573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613cd957600080fd5b505af1158015613ced573d6000803e3d6000fd5b50506022546025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b158015613d6157600080fd5b505af1158015613d75573d6000803e3d6000fd5b50506024805460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063ca669fa7925001600060405180830381600087803b158015613dd157600080fd5b505af1158015613de5573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613e3957600080fd5b505af1158015613e4d573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015613ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ec5919061a064565b9050613ed2816000615221565b6025546040516001600160a01b0390911660248201526044810184905260009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613fb2916001600160a01b039190911690600090869060040161a07d565b600060405180830381600087803b158015613fcc57600080fd5b505af1158015613fe0573d6000803e3d6000fd5b50506022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561407257600080fd5b505af1158015614086573d6000803e3d6000fd5b50506025546040518781526001600160a01b0390911692507f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5915060200160405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561412557600080fd5b505af1158015614139573d6000803e3d6000fd5b50506022546025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e62909150606401600060405180830381600087803b1580156141ad57600080fd5b505af11580156141c1573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614214573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614238919061a064565b905061280f8186615221565b6023546025546040516370a0823160e01b81526001600160a01b039182166004820152620186a09260009283929116906370a0823190602401613e84565b602354602554604051620186a0602482018190526001600160a01b039384166044830152929091166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc51316910000000000000000000000000000000000000000000000000000000017905260235460255491516370a0823160e01b81526001600160a01b0392831660048201529293506000929116906370a0823190602401602060405180830381865afa158015614360573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614384919061a064565b9050614391816000615221565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156143e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614406919061a064565b601f54604080516001600160a01b036101009093048316602482015260448082018a905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926144e192911690600090869060040161a07d565b600060405180830381600087803b1580156144fb57600080fd5b505af115801561450f573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156145a157600080fd5b505af11580156145b5573d6000803e3d6000fd5b5050601f547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af60925061010090046001600160a01b031690506145f860028961a2ad565b602354602554604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156146c057600080fd5b505af11580156146d4573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d9150614719908990889061a0a5565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561477a57600080fd5b505af115801561478e573d6000803e3d6000fd5b50506022546020546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef93506147e692909116908a9089908b9060040161a0be565b600060405180830381600087803b15801561480057600080fd5b505af1158015614814573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614867573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061488b919061a064565b905061489c8161161460028a61a2ad565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156148ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614911919061a064565b90506116198161492260028b61a2ad565b611614908761a126565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f19018152908290526023546020546370a0823160e01b84526001600160a01b0390811660048501529193506000929116906370a0823190602401602060405180830381865afa1580156149c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149e6919061a064565b90506149f3816000615221565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a68919061a064565b601f54604080516001600160a01b036101009093048316602482015260448082018a905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392614b4392911690600090869060040161a07d565b600060405180830381600087803b158015614b5d57600080fd5b505af1158015614b71573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614c0357600080fd5b505af1158015614c17573d6000803e3d6000fd5b505050507f689a5a5cb55e795ffe4cd8b419cd3bb0a3373974c54d25f64e734d7388b93e9b601f60019054906101000a90046001600160a01b03166028604051614c6292919061a2e8565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614cfc57600080fd5b505af1158015614d10573d6000803e3d6000fd5b50506023546020546040516001600160a01b039283169450911691507fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e03590614d5e908a90899060289061a30a565b60405180910390a36022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614df457600080fd5b505af1158015614e08573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f5272d2fee39bff41b2e763562526315906046373ce08a7bacf76c3080d731ff09150614e50908990889060289061a30a565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614eb157600080fd5b505af1158015614ec5573d6000803e3d6000fd5b50506022546020546040517f6f8728ad0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450636f8728ad9350614f2092909116908a9089908b9060289060040161a261565b600060405180830381600087803b158015614f3a57600080fd5b505af1158015614f4e573d6000803e3d6000fd5b50506023546020546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401611542565b60606015805480602002602001604051908101604052809291908181526020018280548015610e44576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610e26575050505050905090565b6024805460405163ca669fa760e01b81526001600160a01b039091166004820152620186a091600091737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b15801561504957600080fd5b505af115801561505d573d6000803e3d6000fd5b505060248054604080516001600160a01b03909216928201929092527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061514c9190600401619eca565b600060405180830381600087803b15801561516657600080fd5b505af115801561517a573d6000803e3d6000fd5b50506022546025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b1580156151ee57600080fd5b505af1158015613207573d6000803e3d6000fd5b600061520c619a63565b6152178484836153e3565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b15801561528d57600080fd5b505afa158015613207573d6000803e3d6000fd5b6040517fa59828850000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063a5982885906024015b60006040518083038186803b15801561530757600080fd5b505afa15801561280f573d6000803e3d6000fd5b6040517f0c9fd5810000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90630c9fd581906024016152ef565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401615275565b6153d6619a63565b61280f858585848661545e565b6000806153f0858461555e565b90506154536040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f7879000000815250828660405160200161543e92919061a335565b6040516020818303038152906040528561556a565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b1580156154d057600080fd5b505af19250505080156154e1575060015b6154f6576154f187878787615598565b612bef565b61550287878787615598565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561553d57600080fd5b505af1158015615551573d6000803e3d6000fd5b5050505050505050505050565b600061545783836155b1565b60c0810151516000901561558e5761558784848460c001516155cc565b9050615457565b6155878484615772565b60006155a4848361585d565b905061280f858285615869565b60006155bd8383615c33565b6154578383602001518461556a565b6000806155d7615c43565b905060006155e58683615d16565b905060006155fc82606001518360200151856161bc565b9050600061560c838389896163ce565b905060006156198261724b565b602081015181519192509060030b1561568c5789826040015160405160200161564392919061a357565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261568391600401619eca565b60405180910390fd5b60006156cf6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a20000000000000000000000081525083600161741a565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90615722908490600401619eca565b602060405180830381865afa15801561573f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615763919061a15b565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906157c7908790600401619eca565b600060405180830381865afa1580156157e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261580c919081019061a491565b9050600061583a828560405160200161582692919061a4c6565b60405160208183030381529060405261761a565b90506001600160a01b03811661521757848460405160200161564392919061a4f5565b60006155bd838361762d565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa158015615905573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615929919061a064565b905080615ad057600061593b86617639565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506159c6905b60408051808201825260008082526020918201528151808301909252845182528085019082015290617731565b806159d2575060008451115b15615a55576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef28690615a1e908890889060040161a335565b600060405180830381600087803b158015615a3857600080fd5b505af1158015615a4c573d6000803e3d6000fd5b50505050615aca565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b158015615ab157600080fd5b505af1158015615ac5573d6000803e3d6000fd5b505050505b5061280f565b806000615adc82617639565b604080518082018252600581527f352e302e3000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615b3e90615999565b80615b4a575060008551115b15615bcf576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90615b98908a908a908a9060040161a5a0565b600060405180830381600087803b158015615bb257600080fd5b505af1158015615bc6573d6000803e3d6000fd5b50505050612bef565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b15801561553d57600080fd5b615c3f82826000617745565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90615cca90849060040161a5d1565b600060405180830381865afa158015615ce7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615d0f919081019061a618565b9250505090565b615d486040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050615d936040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b615d9c85617848565b60208201526000615dac86617c2d565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615dee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615e16919081019061a618565b86838560200151604051602001615e30949392919061a661565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190615e88908590600401619eca565b600060405180830381865afa158015615ea5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615ecd919081019061a618565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615f1590849060040161a765565b602060405180830381865afa158015615f32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615f56919061a139565b615f6b5781604051602001615643919061a7b7565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615fb090849060040161a849565b600060405180830381865afa158015615fcd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615ff5919081019061a618565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061603c90849060040161a89b565b602060405180830381865afa158015616059573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061607d919061a139565b15616112576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906160c790849060040161a89b565b600060405180830381865afa1580156160e4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261610c919081019061a618565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001616137919061a8ed565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161616392919061a959565b600060405180830381865afa158015616180573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526161a8919081019061a618565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816161d85790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106162385761623861a97e565b60200260200101819052506040518060400160405280600381526020017f2d726c00000000000000000000000000000000000000000000000000000000008152508160018151811061628c5761628c61a97e565b6020026020010181905250846040516020016162a8919061a9ad565b604051602081830303815290604052816002815181106162ca576162ca61a97e565b6020026020010181905250826040516020016162e6919061aa19565b604051602081830303815290604052816003815181106163085761630861a97e565b6020026020010181905250600061631e8261724b565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506163af9060408051808201825260008082526020918201528151808301909252845182528085019082015290617eb0565b6163c45785604051602001615643919061aa5a565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d901561641e565b511590565b616592578260200151156164da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401615683565b8260c0015115616592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401615683565b6040805160ff8082526120008201909252600091816020015b60608152602001906001900390816165ab57905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806166069061aaeb565b935060ff168151811061661b5761661b61a97e565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e370000000000000000000000000000000000000081525060405160200161666c919061ab0a565b6040516020818303038152906040528282806166879061aaeb565b935060ff168151811061669c5761669c61a97e565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806166e99061aaeb565b935060ff16815181106166fe576166fe61a97e565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d6500000000000000000000000000000000000081525082828061674b9061aaeb565b935060ff16815181106167605761676061a97e565b6020026020010181905250876020015182828061677c9061aaeb565b935060ff16815181106167915761679161a97e565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806167de9061aaeb565b935060ff16815181106167f3576167f361a97e565b60209081029190910101528751828261680b8161aaeb565b935060ff16815181106168205761682061a97e565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e4964000000000000000000000000000000000000000000000081525082828061686d9061aaeb565b935060ff16815181106168825761688261a97e565b602002602001018190525061689646617f11565b82826168a18161aaeb565b935060ff16815181106168b6576168b661a97e565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c6500000000000000000000000000000000008152508282806169039061aaeb565b935060ff16815181106169185761691861a97e565b6020026020010181905250868282806169309061aaeb565b935060ff16815181106169455761694561a97e565b6020908102919091010152855115616a6c5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f64650000000000000000000000602082015282826169968161aaeb565b935060ff16815181106169ab576169ab61a97e565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d906169fb908990600401619eca565b600060405180830381865afa158015616a18573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616a40919081019061a618565b8282616a4b8161aaeb565b935060ff1681518110616a6057616a6061a97e565b60200260200101819052505b846020015115616b3c5760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282616ab58161aaeb565b935060ff1681518110616aca57616aca61a97e565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280616b179061aaeb565b935060ff1681518110616b2c57616b2c61a97e565b6020026020010181905250616d03565b616b746164198660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b616c075760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282616bb78161aaeb565b935060ff1681518110616bcc57616bcc61a97e565b60200260200101819052508460a00151604051602001616bec919061a9ad565b604051602081830303815290604052828280616b179061aaeb565b8460c00151158015616c4a575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152616c4890511590565b155b15616d035760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282616c8e8161aaeb565b935060ff1681518110616ca357616ca361a97e565b6020026020010181905250616cb788617fb1565b604051602001616cc7919061a9ad565b604051602081830303815290604052828280616ce29061aaeb565b935060ff1681518110616cf757616cf761a97e565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152616d3790511590565b616dcc5760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282616d7a8161aaeb565b935060ff1681518110616d8f57616d8f61a97e565b60200260200101819052508460400151828280616dab9061aaeb565b935060ff1681518110616dc057616dc061a97e565b60200260200101819052505b606085015115616eed5760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282616e158161aaeb565b935060ff1681518110616e2a57616e2a61a97e565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616e99573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616ec1919081019061a618565b8282616ecc8161aaeb565b935060ff1681518110616ee157616ee161a97e565b60200260200101819052505b60e08501515115616f945760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282616f378161aaeb565b935060ff1681518110616f4c57616f4c61a97e565b6020026020010181905250616f688560e0015160000151617f11565b8282616f738161aaeb565b935060ff1681518110616f8857616f8861a97e565b60200260200101819052505b60e0850151602001511561703e5760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282616fe18161aaeb565b935060ff1681518110616ff657616ff661a97e565b60200260200101819052506170128560e0015160200151617f11565b828261701d8161aaeb565b935060ff16815181106170325761703261a97e565b60200260200101819052505b60e085015160400151156170e85760408051808201909152600e81527f2d2d6d61784665655065724761730000000000000000000000000000000000006020820152828261708b8161aaeb565b935060ff16815181106170a0576170a061a97e565b60200260200101819052506170bc8560e0015160400151617f11565b82826170c78161aaeb565b935060ff16815181106170dc576170dc61a97e565b60200260200101819052505b60e085015160600151156171925760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826171358161aaeb565b935060ff168151811061714a5761714a61a97e565b60200260200101819052506171668560e0015160600151617f11565b82826171718161aaeb565b935060ff16815181106171865761718661a97e565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156171b0576171b0619edd565b6040519080825280602002602001820160405280156171e357816020015b60608152602001906001900390816171ce5790505b50905060005b8260ff168160ff16101561723c57838160ff168151811061720c5761720c61a97e565b6020026020010151828260ff16815181106172295761722961a97e565b60209081029190910101526001016171e9565b5093505050505b949350505050565b6172726040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916172f89186910161ab75565b600060405180830381865afa158015617315573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261733d919081019061a618565b9050600061734b8683618aa0565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161737b9190619dbc565b6000604051808303816000875af115801561739a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526173c2919081019061abbc565b805190915060030b158015906173db5750602081015151155b80156173ea5750604081015151155b156163c457816000815181106174025761740261a97e565b6020026020010151604051602001615643919061ac72565b6060600061744f8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506174869082905b90618bf5565b156175e3576000617503826174fd846174f76174c98a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90618c1c565b90618c7e565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617567908290618bf5565b156175d157604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526175ce905b8290618d03565b90505b6175da81618d29565b92505050615457565b82156175fc57848460405160200161564392919061ae5e565b5050604080516020810190915260008152615457565b509392505050565b6000808251602084016000f09392505050565b615c3f82826001617745565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b038616916176ae919061af05565b600060405180830381855afa9150503d80600081146176e9576040519150601f19603f3d011682016040523d82523d6000602084013e6176ee565b606091505b5091509150818015617701575060208151115b1561771a5780806020019051810190617243919061a618565b505060408051602081019091526000815292915050565b600061773d8383618d92565b159392505050565b8160a001511561775457505050565b6000617761848484618e6d565b9050600061776e8261724b565b602081015181519192509060030b15801561780a5750604080518082018252600781527f53554343455353000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261780a90604080518082018252600080825260209182015281518083019092528451825280850190820152617480565b1561781757505050505050565b60408201515115617837578160400151604051602001615643919061af21565b80604051602001615643919061af7f565b6060600061787d8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506178e2905b8290617eb0565b1561795157604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154579061794c908390619408565b618d29565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179b3905b8290619492565b600103617a8057604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a19906175c7565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154579061794c905b8390618d03565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617adf906178db565b15617c1657604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617b4790839061952c565b905060008160018351617b5a919061a126565b81518110617b6a57617b6a61a97e565b60200260200101519050617c0d61794c617be06040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290619408565b95945050505050565b82604051602001615643919061afea565b50919050565b60606000617c628360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617cc4906178db565b15617cd25761545781618d29565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d31906179ac565b600103617d9b57604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526154579061794c90617a79565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617dfa906178db565b15617c1657604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617e6290839061952c565b9050600181511115617e9e578060028251617e7d919061a126565b81518110617e8d57617e8d61a97e565b602002602001015192505050919050565b5082604051602001615643919061afea565b805182516000911115617ec55750600061521b565b81518351602085015160009291617edb9161b0c8565b617ee5919061a126565b905082602001518103617efc57600191505061521b565b82516020840151819020912014905092915050565b60606000617f1e836195d1565b600101905060008167ffffffffffffffff811115617f3e57617f3e619edd565b6040519080825280601f01601f191660200182016040528015617f68576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084617f7257509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161803d905b8290617731565b1561807d57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526180dc90618036565b1561811c57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261817b90618036565b156181bb57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261821a90618036565b8061827f5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261827f90618036565b156182bf57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261831e90618036565b806183835750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261838390618036565b156183c357505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261842290618036565b806184875750604080518082018252601181527f4c47504c2d322e312d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261848790618036565b156184c757505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261852690618036565b8061858b5750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261858b90618036565b156185cb57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261862a90618036565b1561866a57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526186c990618036565b1561870957505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261876890618036565b156187a857505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261880790618036565b1561884757505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e3000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188a690618036565b156188e657505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261894590618036565b806189aa5750604080518082018252601181527f4147504c2d332e302d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189aa90618036565b156189ea57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a4990618036565b15618a8957505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151615643929060200161b0db565b60608060005b8451811015618b2b5781858281518110618ac257618ac261a97e565b6020026020010151604051602001618adb92919061a4c6565b604051602081830303815290604052915060018551618afa919061a126565b8114618b235781604051602001618b11919061b244565b60405160208183030381529060405291505b600101618aa6565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081618b445790505090508381600081518110618b6f57618b6f61a97e565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110618bc357618bc361a97e565b60200260200101819052508181600281518110618be257618be261a97e565b6020908102919091010152949350505050565b6020808301518351835192840151600093618c1392918491906196b3565b14159392505050565b60408051808201909152600080825260208201526000618c4e84600001518560200151856000015186602001516197c4565b9050836020015181618c60919061a126565b84518590618c6f90839061a126565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015618ca357508161521b565b6020808301519084015160019114618cca5750815160208481015190840151829020919020145b8015618cfb57825184518590618ce190839061a126565b9052508251602085018051618cf790839061b0c8565b9052505b509192915050565b6040805180820190915260008082526020820152618d228383836198e4565b5092915050565b60606000826000015167ffffffffffffffff811115618d4a57618d4a619edd565b6040519080825280601f01601f191660200182016040528015618d74576020820181803683370190505b5090506000602082019050618d22818560200151866000015161998f565b8151815160009190811115618da5575081515b6020808501519084015160005b83811015618e5e5782518251808214618e2e576000196020871015618e0d57600184618ddf89602061a126565b618de9919061b0c8565b618df490600861b285565b618dff90600261b383565b618e09919061a126565b1990505b8181168382168181039114618e2b57975061521b9650505050505050565b50505b618e3960208661b0c8565b9450618e4660208561b0c8565b93505050602081618e57919061b0c8565b9050618db2565b50845186516163c4919061b38f565b60606000618e79615c43565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081618e9657905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280618ef19061aaeb565b935060ff1681518110618f0657618f0661a97e565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618f57919061b3af565b604051602081830303815290604052828280618f729061aaeb565b935060ff1681518110618f8757618f8761a97e565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280618fd49061aaeb565b935060ff1681518110618fe957618fe961a97e565b602002602001018190525082604051602001619005919061aa19565b6040516020818303038152906040528282806190209061aaeb565b935060ff16815181106190355761903561a97e565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806190829061aaeb565b935060ff16815181106190975761909761a97e565b60200260200101819052506190ac8784619a09565b82826190b78161aaeb565b935060ff16815181106190cc576190cc61a97e565b6020908102919091010152855151156191785760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261911e8161aaeb565b935060ff16815181106191335761913361a97e565b602002602001018190525061914c866000015184619a09565b82826191578161aaeb565b935060ff168151811061916c5761916c61a97e565b60200260200101819052505b8560800151156191e65760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826191c18161aaeb565b935060ff16815181106191d6576191d661a97e565b602002602001018190525061924c565b841561924c5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261922b8161aaeb565b935060ff16815181106192405761924061a97e565b60200260200101819052505b604086015151156192e85760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826192968161aaeb565b935060ff16815181106192ab576192ab61a97e565b602002602001018190525085604001518282806192c79061aaeb565b935060ff16815181106192dc576192dc61a97e565b60200260200101819052505b8560600151156193525760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826193318161aaeb565b935060ff16815181106193465761934661a97e565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561937057619370619edd565b6040519080825280602002602001820160405280156193a357816020015b606081526020019060019003908161938e5790505b50905060005b8260ff168160ff1610156193fc57838160ff16815181106193cc576193cc61a97e565b6020026020010151828260ff16815181106193e9576193e961a97e565b60209081029190910101526001016193a9565b50979650505050505050565b604080518082019091526000808252602082015281518351101561942d57508161521b565b815183516020850151600092916194439161b0c8565b61944d919061a126565b6020840151909150600190821461946e575082516020840151819020908220145b80156194895783518551869061948590839061a126565b9052505b50929392505050565b60008082600001516194b685600001518660200151866000015187602001516197c4565b6194c0919061b0c8565b90505b835160208501516194d4919061b0c8565b8111618d2257816194e48161b3f4565b925050826000015161951b8560200151836194ff919061a126565b865161950b919061a126565b83866000015187602001516197c4565b619525919061b0c8565b90506194c3565b6060600061953a8484619492565b61954590600161b0c8565b67ffffffffffffffff81111561955d5761955d619edd565b60405190808252806020026020018201604052801561959057816020015b606081526020019060019003908161957b5790505b50905060005b8151811015617612576195ac61794c8686618d03565b8282815181106195be576195be61a97e565b6020908102919091010152600101619596565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061961a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619646576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061966457662386f26fc10000830492506010015b6305f5e100831061967c576305f5e100830492506008015b612710831061969057612710830492506004015b606483106196a2576064830492506002015b600a831061521b5760010192915050565b6000808584116197ba576020841161976657600084156196fe5760016196da86602061a126565b6196e590600861b285565b6196f090600261b383565b6196fa919061a126565b1990505b835181168561970d898961b0c8565b619717919061a126565b805190935082165b818114619751578784116197395787945050505050617243565b836197438161b40e565b94505082845116905061971f565b61975b878561b0c8565b945050505050617243565b838320619773858861a126565b61977d908761b0c8565b91505b8582106197b8578482208082036197a55761979b868461b0c8565b9350505050617243565b6197b060018461a126565b925050619780565b505b5092949350505050565b600083818685116198cf576020851161987e57600085156198105760016197ec87602061a126565b6197f790600861b285565b61980290600261b383565b61980c919061a126565b1990505b845181166000876198218b8b61b0c8565b61982b919061a126565b855190915083165b828114619870578186106198585761984b8b8b61b0c8565b9650505050505050617243565b856198628161b3f4565b965050838651169050619833565b859650505050505050617243565b508383206000905b619890868961a126565b82116198cd578583208082036198ac5783945050505050617243565b6198b760018561b0c8565b93505081806198c59061b3f4565b925050619886565b505b6198d9878761b0c8565b979650505050505050565b6040805180820190915260008082526020820152600061991685600001518660200151866000015187602001516197c4565b602080870180519186019190915251909150619932908261a126565b835284516020860151619945919061b0c8565b81036199545760008552619986565b83518351619962919061b0c8565b8551869061997190839061a126565b9052508351619980908261b0c8565b60208601525b50909392505050565b602081106199c757815183526199a660208461b0c8565b92506199b360208361b0c8565b91506199c060208261a126565b905061998f565b60001981156199f65760016199dd83602061a126565b6199e99061010061b383565b6199f3919061a126565b90505b9151835183169219169190911790915250565b60606000619a178484615d16565b8051602080830151604051939450619a319390910161b425565b60405160208183030381529060405291505092915050565b610c9f8061b47e83390190565b610ec28061c11d83390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001619aa6619aab565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001619aa66040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015619b5d5783516001600160a01b0316835260209384019390920191600101619b36565b509095945050505050565b60005b83811015619b83578181015183820152602001619b6b565b50506000910152565b60008151808452619ba4816020860160208601619b68565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619cb4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015619c9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352619c84848651619b8c565b6020958601959094509290920191600101619c4a565b509197505050602094850194929092019150600101619be0565b50929695505050505050565b600081518084526020840193506020830160005b82811015619d145781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101619cd4565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619cb4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752619d8a6040880182619b8c565b9050602082015191508681036020880152619da58183619cc0565b965050506020938401939190910190600101619d46565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619cb4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452619e1e858351619b8c565b94506020938401939190910190600101619de4565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619cb4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152619eb46040870182619cc0565b9550506020938401939190910190600101619e5b565b6020815260006154576020830184619b8c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c90821680619f2057607f821691505b602082108103617c27577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115619fa057806000526020600020601f840160051c81016020851015619f805750805b601f840160051c820191505b8181101561280f5760008155600101619f8c565b505050565b815167ffffffffffffffff811115619fbf57619fbf619edd565b619fd381619fcd8454619f0c565b84619f59565b6020601f82116001811461a0075760008315619fef5750848201515b600019600385901b1c1916600184901b17845561280f565b600084815260208120601f198516915b8281101561a037578785015182556020948501946001909201910161a017565b508482101561a0555786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561a07657600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000617c0d6060830184619b8c565b8281526040602082015260006172436040830184619b8c565b6001600160a01b038516815283602082015260806040820152600061a0e66080830185619b8c565b905082606083015295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561521b5761521b61a0f7565b60006020828403121561a14b57600080fd5b8151801515811461545757600080fd5b60006020828403121561a16d57600080fd5b81516001600160a01b038116811461545757600080fd5b6001600160a01b0381541682526001600160a01b03600182015416602083015260028101546040830152600060038201608060608501526000815461a1c881619f0c565b806080880152600182166000811461a1e7576001811461a2215761a255565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660a089015260a082151560051b890101935061a255565b84600052602060002060005b8381101561a24c5781548a820160a0015260019091019060200161a22d565b890160a0019450505b50919695505050505050565b6001600160a01b038616815284602082015260a06040820152600061a28960a0830186619b8c565b846060840152828103608084015261a2a1818561a184565b98975050505050505050565b60008261a2e3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b0383168152604060208201526000617243604083018461a184565b83815260606020820152600061a3236060830185619b8c565b82810360408401526163c4818561a184565b6001600160a01b03831681526040602082015260006172436040830184619b8c565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a38f81601a850160208801619b68565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161a3cc81601c840160208801619b68565b01601c01949350505050565b6040516060810167ffffffffffffffff8111828210171561a3fb5761a3fb619edd565b60405290565b60008067ffffffffffffffff84111561a41c5761a41c619edd565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561a44b5761a44b619edd565b60405283815290508082840185101561a46357600080fd5b617612846020830185619b68565b600082601f83011261a48257600080fd5b6154578383516020850161a401565b60006020828403121561a4a357600080fd5b815167ffffffffffffffff81111561a4ba57600080fd5b6152178482850161a471565b6000835161a4d8818460208801619b68565b83519083019061a4ec818360208801619b68565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a52d81601a850160208801619b68565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161a56a816033840160208801619b68565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b0383166020820152606060408201526000617c0d6060830184619b8c565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006154576080830184619b8c565b60006020828403121561a62a57600080fd5b815167ffffffffffffffff81111561a64157600080fd5b8201601f8101841361a65257600080fd5b6152178482516020840161a401565b6000855161a673818460208a01619b68565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161a6ad816001840160208a01619b68565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161a6eb816002840160208901619b68565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161a72d816002840160208801619b68565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061a7786040830184619b8c565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161a7ef81601f850160208701619b68565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061a85c6040830184619b8c565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061a8ae6040830184619b8c565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161a925816014850160208701619b68565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061a96c6040830185619b8c565b82810360208401526154538185619b8c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161a9e5816001850160208701619b68565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161aa2b818460208701619b68565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161aade81604b850160208701619b68565b91909101604b0192915050565b600060ff821660ff810361ab015761ab0161a0f7565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161ab68816029850160208701619b68565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006154576080830184619b8c565b60006020828403121561abce57600080fd5b815167ffffffffffffffff81111561abe557600080fd5b82016060818503121561abf757600080fd5b61abff61a3d8565b81518060030b811461ac1057600080fd5b8152602082015167ffffffffffffffff81111561ac2c57600080fd5b61ac388682850161a471565b602083015250604082015167ffffffffffffffff81111561ac5857600080fd5b61ac648682850161a471565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161acd0816021850160208701619b68565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161aebc816021850160208801619b68565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161aef981602e840160208801619b68565b01602e01949350505050565b6000825161af17818460208701619b68565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161ab68816029850160208701619b68565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161afdd816022850160208701619b68565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b02281600e850160208701619b68565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561521b5761521b61a0f7565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b113816018850160208801619b68565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b15081601c840160208801619b68565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161b256818460208701619b68565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b808202811582820484141761521b5761521b61a0f7565b6001815b600184111561b2d75780850481111561b2bb5761b2bb61a0f7565b600184161561b2c957908102905b60019390931c92800261b2a0565b935093915050565b60008261b2ee5750600161521b565b8161b2fb5750600061521b565b816001811461b311576002811461b31b5761b337565b600191505061521b565b60ff84111561b32c5761b32c61a0f7565b50506001821b61521b565b5060208310610133831016604e8410600b841016171561b35a575081810a61521b565b61b367600019848461b29c565b806000190482111561b37b5761b37b61a0f7565b029392505050565b6000615457838361b2df565b8181036000831280158383131683831282161715618d2257618d2261a0f7565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161b3e781601c850160208701619b68565b91909101601c0192915050565b6000600019820361b4075761b40761a0f7565b5060010190565b60008161b41d5761b41d61a0f7565b506000190190565b6000835161b437818460208801619b68565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161b471816001840160208801619b68565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610e9e806100246000396000f3fe60806040526004361061006e5760003560e01c8063c51316911161004b578063c5131691146100d5578063c9028a36146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a214610077578063676cc054146100975780636ed70169146100c057005b3661007557005b005b34801561008357600080fd5b506100756100923660046106ec565b610148565b6100aa6100a5366004610728565b6101de565b6040516100b79190610823565b60405180910390f35b3480156100cc57600080fd5b50610075610222565b3480156100e157600080fd5b506100756100f03660046106ec565b610257565b34801561010157600080fd5b50610075610110366004610836565b610332565b610075610123366004610996565b61036e565b34801561013457600080fd5b50610075610143366004610a82565b6103b2565b6101506103e7565b61017273ffffffffffffffffffffffffffffffffffffffff831633838661042a565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a1506040805160208101909152600081525b9392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61025f6103e7565b600061026c600285610b6c565b9050806000036102a8576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102ca73ffffffffffffffffffffffffffffffffffffffff841633848461042a565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f689a5a5cb55e795ffe4cd8b419cd3bb0a3373974c54d25f64e734d7388b93e9b3382604051610363929190610bf0565b60405180910390a150565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa33348585856040516103a5959493929190610ce2565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103a59493929190610d6c565b600260005403610423576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104bf9085906104c5565b50505050565b60006104e773ffffffffffffffffffffffffffffffffffffffff841683610560565b9050805160001415801561050c57508080602001905181019061050a9190610e2f565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061021b83836000846000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105939190610e4c565b60006040518083038185875af1925050503d80600081146105d0576040519150601f19603f3d011682016040523d82523d6000602084013e6105d5565b606091505b50915091506105e58683836105ef565b9695505050505050565b606082610604576105ff8261067e565b61021b565b8151158015610628575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610677576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610557565b508061021b565b80511561068e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106e757600080fd5b919050565b60008060006060848603121561070157600080fd5b83359250610711602085016106c3565b915061071f604085016106c3565b90509250925092565b6000806000838503604081121561073e57600080fd5b602081121561074c57600080fd5b50839250602084013567ffffffffffffffff81111561076a57600080fd5b8401601f8101861361077b57600080fd5b803567ffffffffffffffff81111561079257600080fd5b8660208284010111156107a457600080fd5b939660209190910195509293505050565b60005b838110156107d05781810151838201526020016107b8565b50506000910152565b600081518084526107f18160208601602086016107b5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061021b60208301846107d9565b60006020828403121561084857600080fd5b813567ffffffffffffffff81111561085f57600080fd5b82016080818503121561021b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156108e7576108e7610871565b604052919050565b600082601f83011261090057600080fd5b813567ffffffffffffffff81111561091a5761091a610871565b61094b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108a0565b81815284602083860101111561096057600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106c057600080fd5b80356106e78161097d565b6000806000606084860312156109ab57600080fd5b833567ffffffffffffffff8111156109c257600080fd5b6109ce868287016108ef565b9350506020840135915060408401356109e68161097d565b809150509250925092565b600067ffffffffffffffff821115610a0b57610a0b610871565b5060051b60200190565b600082601f830112610a2657600080fd5b8135610a39610a34826109f1565b6108a0565b8082825260208201915060208360051b860101925085831115610a5b57600080fd5b602085015b83811015610a78578035835260209283019201610a60565b5095945050505050565b600080600060608486031215610a9757600080fd5b833567ffffffffffffffff811115610aae57600080fd5b8401601f81018613610abf57600080fd5b8035610acd610a34826109f1565b8082825260208201915060208360051b850101925088831115610aef57600080fd5b602084015b83811015610b3157803567ffffffffffffffff811115610b1357600080fd5b610b228b6020838901016108ef565b84525060209283019201610af4565b509550505050602084013567ffffffffffffffff811115610b5157600080fd5b610b5d86828701610a15565b92505061071f6040850161098b565b600082610ba2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2e836106c3565b16604082015273ffffffffffffffffffffffffffffffffffffffff610c55602084016106c3565b166060820152600080604084013590508060808401525060608301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610ca157600080fd5b830160208101903567ffffffffffffffff811115610cbe57600080fd5b803603821315610ccd57600080fd5b608060a08501526105e560c085018284610ba7565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d1760a08301866107d9565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610d62578151865260209586019590910190600101610d44565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610dff577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610dea8583516107d9565b94506020938401939190910190600101610db0565b505050508281036040840152610e158186610d30565b915050610e26606083018415159052565b95945050505050565b600060208284031215610e4157600080fd5b815161021b8161097d565b60008251610e5e8184602087016107b5565b919091019291505056fea26469706673582212200121b4788f0b35a4b6df21db4f43708a9b20e8b16f616e6f3300230e75bbdd1364736f6c634300081a00335a657461436f6e6e6563746f724e617469766555706772616465546573742e736f6ca26469706673582212208ae3c9625bc4290a042422793e40fcbec9a36e9adee3ee9cf77ee3c70c02330564736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testTSSUpgrade\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfSenderIsNotTSSUpdater\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testTSSUpgradeFailsIfZeroAddress\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpgradeAndWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveOnCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedOnCall\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x600c8054600160ff199182168117909255601f8054909116909117905560a06040526000608052602c80546001600160a01b0319169055348015604157600080fd5b5061d708806100516000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c8063a217fddf1161010f578063ccb0e3f2116100a2578063e20c9f7111610071578063e20c9f711461037d578063e63ab1e914610385578063fa7626d4146103ac578063fe574f84146103b957600080fd5b8063ccb0e3f21461035d578063d509b16c14610365578063dcf7d0371461036d578063de1cb76c1461037557600080fd5b8063b0a64d03116100de578063b0a64d031461032d578063b5508aa914610335578063ba414fa61461033d578063c19099721461035557600080fd5b8063a217fddf146102ee578063a783c789146102f6578063af298bb11461031d578063b0464fdc1461032557600080fd5b80634df42da11161018757806385226c811161015657806385226c811461028757806385f438c11461029c578063916a17c6146102d157806395665330146102e657600080fd5b80634df42da11461025a57806352ff59391461026257806366d9a9a01461026a578063828320141461027f57600080fd5b80633cba0107116101c35780633cba01071461023a5780633e5e3c23146102425780633f7286f41461024a578063493465581461025257600080fd5b8063070f2ad0146101f55780630a9254e4146101ff5780631ed7831c146102075780632ade388014610225575b600080fd5b6101fd6103c1565b005b6101fd6105c1565b61020f610e12565b60405161021c919061a13d565b60405180910390f35b61022d610e74565b60405161021c919061a1d9565b6101fd610fb6565b61020f611748565b61020f6117a8565b6101fd611808565b6101fd611e1b565b6101fd611f8b565b6102726127c1565b60405161021c919061a33f565b6101fd612943565b61028f612ba3565b60405161021c919061a3dd565b6102c37f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b60405190815260200161021c565b6102d9612c73565b60405161021c919061a454565b6101fd612d6e565b6102c3600081565b6102c37f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101fd612fb7565b6102d96133ea565b6101fd6134e5565b61028f6139bf565b610345613a8f565b604051901515815260200161021c565b6101fd613b63565b6101fd613dd4565b6101fd6148e1565b6101fd61491f565b6101fd614f98565b61020f6155aa565b6102c37f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f546103459060ff1681565b6101fd61560a565b6026546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d5690602401600060405180830381600087803b15801561043357600080fd5b505af1158015610447573d6000803e3d6000fd5b5050602654604080516001600160a01b039092166024830152600060448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250610513919060040161a4eb565b600060405180830381600087803b15801561052d57600080fd5b505af1158015610541573d6000803e3d6000fd5b5050602254602480546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201529216935063950837aa9250015b600060405180830381600087803b1580156105a757600080fd5b505af11580156105bb573d6000803e3d6000fd5b50505050565b602480547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556025805482166112341790556026805482166156781790556027805490911661987617905560405161061f9061a06a565b604080825260049082018190527f7a6574610000000000000000000000000000000000000000000000000000000060608301526080602083018190528201527f5a4554410000000000000000000000000000000000000000000000000000000060a082015260c001604051809103906000f0801580156106a3573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260265460248054935191861690820152604481019390935292166064820152600091610795916084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b00000000000000000000000000000000000000000000000000000000179052615823565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0384811682029290921792839055604080518082018252601081527f4552433230437573746f64792e736f6c000000000000000000000000000000006020820152602654602480549351949096048516958401959095529383166044830152909116606482015291925061083b91608401610738565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691909117909155604080518082018252601781527f5a657461436f6e6e6563746f724e61746976652e736f6c0000000000000000006020820152601f546023546026546024805495516101009094048716908401529085166044830152841660648201529190921660848201529192506109409160a40160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff8c8765e00000000000000000000000000000000000000000000000000000000179052615823565b602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383161790556040519091506109829061a077565b604051809103906000f08015801561099e573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556026546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b5050602480546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d93506306447d56925001600060405180830381600087803b158015610ad357600080fd5b505af1158015610ae7573d6000803e3d6000fd5b5050601f546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f9150602401600060405180830381600087803b158015610b5257600080fd5b505af1158015610b66573d6000803e3d6000fd5b5050601f546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef9150602401600060405180830381600087803b158015610bd157600080fd5b505af1158015610be5573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c4757600080fd5b505af1158015610c5b573d6000803e3d6000fd5b50506023546022546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152624c4b406024820152911692506340c10f199150604401600060405180830381600087803b158015610cca57600080fd5b505af1158015610cde573d6000803e3d6000fd5b50506026546040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c88a5e6d9150604401600060405180830381600087803b158015610d6257600080fd5b505af1158015610d76573d6000803e3d6000fd5b5050604080516080810182526024546001600160a01b039081168252602354811660208084019182526001848601908152855191820190955260008152606084018190528351602880549185167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178155925160298054919095169116179092559251602a55909350909150602b906105bb908261a5c6565b60606016805480602002602001604051908101604052809291908181526020018280548015610e6a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e4c575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610fad57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610f96578382906000526020600020018054610f099061a52d565b80601f0160208091040260200160405190810160405280929190818152602001828054610f359061a52d565b8015610f825780601f10610f5757610100808354040283529160200191610f82565b820191906000526020600020905b815481529060010190602001808311610f6557829003601f168201915b505050505081526020019060010190610eea565b505050508152505081526020019060010190610e98565b50505050905090565b602354602554604051620186a0602482018190526001600160a01b039384166044830152929091166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260235460255491516370a0823160e01b81526001600160a01b0392831660048201529293506000929116906370a0823190602401602060405180830381865afa158015611094573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b8919061a685565b90506110c5816000615842565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113a919061a685565b601f54604080516001600160a01b036101009093048316602482015260448082018a905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba39261121592911690600090869060040161a69e565b600060405180830381600087803b15801561122f57600080fd5b505af1158015611243573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b1580156112bc57600080fd5b505af11580156112d0573d6000803e3d6000fd5b5050601f54602354602554604080516101009094046001600160a01b039081168552602085018d9052928316908401521660608201527f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609250608001905060405180910390a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156113ab57600080fd5b505af11580156113bf573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d9150611404908990889061a6c6565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561146557600080fd5b505af1158015611479573d6000803e3d6000fd5b50506022546020546040517f6fb9a7af0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450636fb9a7af93506114d292602c9216908b908a908c9060040161a6df565b600060405180830381600087803b1580156114ec57600080fd5b505af1158015611500573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015611554573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611578919061a685565b90506115848188615842565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156115d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f9919061a685565b905061160e816116098a8761a758565b615842565b602354601f546020546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b0390811660048401529081166024830152600092169063dd62ed3e90604401602060405180830381865afa158015611686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116aa919061a685565b90506116b7816000615842565b602354601f546040516370a0823160e01b81526101009091046001600160a01b03908116600483015260009216906370a0823190602401602060405180830381865afa15801561170b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172f919061a685565b905061173c816000615842565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610e6a576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610e4c575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610e6a576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610e4c575050505050905090565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905260235460255493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a08231936118aa93921691016001600160a01b0391909116815260200190565b602060405180830381865afa1580156118c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118eb919061a685565b90506118f8816000615842565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611949573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061196d919061a685565b601f54604080516001600160a01b036101009093048316602482015260448082018a905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392611a4892911690600090869060040161a69e565b600060405180830381600087803b158015611a6257600080fd5b505af1158015611a76573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611aef57600080fd5b505af1158015611b03573d6000803e3d6000fd5b5050601f546040516101009091046001600160a01b031681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09250602001905060405180910390a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611bc157600080fd5b505af1158015611bd5573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d9150611c1a908990889061a6c6565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611c7b57600080fd5b505af1158015611c8f573d6000803e3d6000fd5b50506022546020546040517f6fb9a7af0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450636fb9a7af9350611ce892602c9216908b908a908c9060040161a6df565b600060405180830381600087803b158015611d0257600080fd5b505af1158015611d16573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8d919061a685565b9050611d9a816000615842565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611deb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0f919061a685565b905061160e8185615842565b602480546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b158015611e8c57600080fd5b505af1158015611ea0573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd92e233d000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015611f2957600080fd5b505af1158015611f3d573d6000803e3d6000fd5b50506022546040517f950837aa000000000000000000000000000000000000000000000000000000008152600060048201526001600160a01b03909116925063950837aa915060240161058d565b6022546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4600482015261432160248201819052916000916001600160a01b03909116906391d1485490604401602060405180830381865afa15801561201a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203e919061a76b565b9050612049816158c2565b6022546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b03848116602483015260009216906391d1485490604401602060405180830381865afa1580156120d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f7919061a76b565b9050612102816158c2565b6022546026546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b03918216602482015260009291909116906391d1485490604401602060405180830381865afa158015612192573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b6919061a76b565b90506121c18161593c565b6022546026546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b03918216602482015260009291909116906391d1485490604401602060405180830381865afa158015612251573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612275919061a76b565b90506122808161593c565b602480546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d916306447d569101600060405180830381600087803b1580156122f157600080fd5b505af1158015612305573d6000803e3d6000fd5b50506022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561237e57600080fd5b505af1158015612392573d6000803e3d6000fd5b5050602654604080516001600160a01b03928316815291891660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e935001905060405180910390a16022546040517f950837aa0000000000000000000000000000000000000000000000000000000081526001600160a01b0387811660048301529091169063950837aa90602401600060405180830381600087803b15801561243e57600080fd5b505af1158015612452573d6000803e3d6000fd5b505050506124d685602260009054906101000a90046001600160a01b03166001600160a01b0316635b1125916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d1919061a78d565b61598e565b6022546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b038781166024830152909116906391d1485490604401602060405180830381865afa15801561255f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612583919061a76b565b935061258e8461593c565b6022546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b038781166024830152909116906391d1485490604401602060405180830381865afa158015612617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061263b919061a76b565b92506126468361593c565b6022546026546040517f91d148540000000000000000000000000000000000000000000000000000000081527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460048201526001600160a01b0391821660248201529116906391d1485490604401602060405180830381865afa1580156126d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f5919061a76b565b9150612700826158c2565b6022546026546040517f91d148540000000000000000000000000000000000000000000000000000000081527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60048201526001600160a01b0391821660248201529116906391d1485490604401602060405180830381865afa15801561278b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127af919061a76b565b90506127ba816158c2565b5050505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610fad57838290600052602060002090600202016040518060400160405290816000820180546128189061a52d565b80601f01602080910402602001604051908101604052809291908181526020018280546128449061a52d565b80156128915780601f1061286657610100808354040283529160200191612891565b820191906000526020600020905b81548152906001019060200180831161287457829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561292b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116128d85790505b505050505081525050815260200190600101906127e5565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f19018152908290526024805463ca669fa760e01b84526001600160a01b03166004840152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b1580156129e057600080fd5b505af11580156129f4573d6000803e3d6000fd5b505060248054604080516001600160a01b03909216928201929092527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250612ae3919060040161a4eb565b600060405180830381600087803b158015612afd57600080fd5b505af1158015612b11573d6000803e3d6000fd5b50506022546020546040517f6f8728ad0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450636f8728ad9350612b6c929091169087908690889060289060040161a893565b600060405180830381600087803b158015612b8657600080fd5b505af1158015612b9a573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610fad578382906000526020600020018054612be69061a52d565b80601f0160208091040260200160405190810160405280929190818152602001828054612c129061a52d565b8015612c5f5780601f10612c3457610100808354040283529160200191612c5f565b820191906000526020600020905b815481529060010190602001808311612c4257829003601f168201915b505050505081526020019060010190612bc7565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610fad5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612d5657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612d035790505b50505050508152505081526020019060010190612c97565b604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000060208201529051620186a09160009161012391908390612dc2908490849060240161a8df565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f676cc05400000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fed699775000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b158015612ea057600080fd5b505af1158015612eb4573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612f1157600080fd5b505af1158015612f25573d6000803e3d6000fd5b50506022546020546040517f6fb9a7af0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450636fb9a7af9350612f7e92602c9216908a9087908b9060040161a6df565b600060405180830381600087803b158015612f9857600080fd5b505af1158015612fac573d6000803e3d6000fd5b505050505050505050565b602280546040805160608101909152828152613001926001600160a01b039092169161d6b160208301396040805160208101909152600081526024546001600160a01b03166159ef565b6022546023546025546040516370a0823160e01b81526001600160a01b03918216600482015292811692620186a09260009283929116906370a0823190602401602060405180830381865afa15801561305e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613082919061a685565b905061308f816000615842565b6025546040516001600160a01b0390911660248201526044810184905260009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba39161316f916001600160a01b039190911690600090869060040161a69e565b600060405180830381600087803b15801561318957600080fd5b505af115801561319d573d6000803e3d6000fd5b50506040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b0388166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561321257600080fd5b505af1158015613226573d6000803e3d6000fd5b50506025546040518781526001600160a01b0390911692507f3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee9915060200160405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156132c557600080fd5b505af11580156132d9573d6000803e3d6000fd5b50506025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810188905260448101879052908816925063106e62909150606401600060405180830381600087803b15801561334b57600080fd5b505af115801561335f573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156133b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d6919061a685565b90506133e28186615842565b505050505050565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610fad5760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156134cd57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161347a5790505b5050505050815250508152602001906001019061340e565b604080518082018252600181527f3100000000000000000000000000000000000000000000000000000000000000602082015260235460255492516370a0823160e01b81526001600160a01b039384166004820152620186a0936000936101239390928592909116906370a0823190602401602060405180830381865afa158015613574573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613598919061a685565b90506135a5816000615842565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156135f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361a919061a685565b6020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561369257600080fd5b505af11580156136a6573d6000803e3d6000fd5b505050507fd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a35250184846040516136db92919061a8df565b60405180910390a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561375857600080fd5b505af115801561376c573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d91506137b1908990879061a6c6565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561381257600080fd5b505af1158015613826573d6000803e3d6000fd5b505060225460408051602080820183526001600160a01b038a81168352905492517f6fb9a7af0000000000000000000000000000000000000000000000000000000081529381169550636fb9a7af945061388c93919216908b9089908c9060040161a901565b600060405180830381600087803b1580156138a657600080fd5b505af11580156138ba573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa15801561390d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613931919061a685565b905061393e816000615842565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561398f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b3919061a685565b905061160e8184615842565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610fad578382906000526020600020018054613a029061a52d565b80601f0160208091040260200160405190810160405280929190818152602001828054613a2e9061a52d565b8015613a7b5780601f10613a5057610100808354040283529160200191613a7b565b820191906000526020600020905b815481529060010190602001808311613a5e57829003601f168201915b5050505050815260200190600101906139e3565b60085460009060ff1615613aa7575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015613b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b5c919061a685565b1415905090565b602354602554604051620186a0602482018190526001600160a01b039384166044830152929091166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260248054915163ca669fa760e01b81526001600160a01b039092166004830152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b158015613c4a57600080fd5b505af1158015613c5e573d6000803e3d6000fd5b505060248054604080516001600160a01b03909216928201929092527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613d4d919060040161a4eb565b600060405180830381600087803b158015613d6757600080fd5b505af1158015613d7b573d6000803e3d6000fd5b50506022546020546040517f6fb9a7af0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450636fb9a7af9350612b6c92602c92169088908790899060040161a6df565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613e3557600080fd5b505af1158015613e49573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613f34919060040161a4eb565b600060405180830381600087803b158015613f4e57600080fd5b505af1158015613f62573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613fb657600080fd5b505af1158015613fca573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561402757600080fd5b505af115801561403b573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250614126919060040161a4eb565b600060405180830381600087803b15801561414057600080fd5b505af1158015614154573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156141a857600080fd5b505af11580156141bc573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561421957600080fd5b505af115801561422d573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561428157600080fd5b505af1158015614295573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561431e57600080fd5b505af1158015614332573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561438f57600080fd5b505af11580156143a3573d6000803e3d6000fd5b50506022546025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561441757600080fd5b505af115801561442b573d6000803e3d6000fd5b50506024805460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063ca669fa7925001600060405180830381600087803b15801561448757600080fd5b505af115801561449b573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156144ef57600080fd5b505af1158015614503573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a08231906024015b602060405180830381865afa158015614557573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061457b919061a685565b9050614588816000615842565b6025546040516001600160a01b0390911660248201526044810184905260009060640160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614668916001600160a01b039190911690600090869060040161a69e565b600060405180830381600087803b15801561468257600080fd5b505af1158015614696573d6000803e3d6000fd5b50506022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561470f57600080fd5b505af1158015614723573d6000803e3d6000fd5b50506025546040518781526001600160a01b0390911692507f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5915060200160405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156147c257600080fd5b505af11580156147d6573d6000803e3d6000fd5b50506022546025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e62909150606401600060405180830381600087803b15801561484a57600080fd5b505af115801561485e573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156148b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148d5919061a685565b90506127ba8186615842565b6023546025546040516370a0823160e01b81526001600160a01b039182166004820152620186a09260009283929116906370a082319060240161453a565b602354602554604051620186a0602482018190526001600160a01b039384166044830152929091166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc51316910000000000000000000000000000000000000000000000000000000017905260235460255491516370a0823160e01b81526001600160a01b0392831660048201529293506000929116906370a0823190602401602060405180830381865afa1580156149fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a21919061a685565b9050614a2e816000615842565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614aa3919061a685565b601f54604080516001600160a01b036101009093048316602482015260448082018a905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392614b7e92911690600090869060040161a69e565b600060405180830381600087803b158015614b9857600080fd5b505af1158015614bac573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614c2557600080fd5b505af1158015614c39573d6000803e3d6000fd5b5050601f547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af60925061010090046001600160a01b03169050614c7c60028961a939565b602354602554604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614d2b57600080fd5b505af1158015614d3f573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d9150614d84908990889061a6c6565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614de557600080fd5b505af1158015614df9573d6000803e3d6000fd5b50506022546020546040517f6fb9a7af0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450636fb9a7af9350614e5292602c9216908b908a908c9060040161a6df565b600060405180830381600087803b158015614e6c57600080fd5b505af1158015614e80573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614ed3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ef7919061a685565b9050614f088161160960028a61a939565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614f7d919061a685565b905061160e81614f8e60028b61a939565b611609908761a758565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f19018152908290526023546020546370a0823160e01b84526001600160a01b0390811660048501529193506000929116906370a0823190602401602060405180830381865afa15801561502e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615052919061a685565b905061505f816000615842565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156150b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150d4919061a685565b601f54604080516001600160a01b036101009093048316602482015260448082018a905282518083039091018152606490910182526020810180517fa9059cbb000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba3926151af92911690600090869060040161a69e565b600060405180830381600087803b1580156151c957600080fd5b505af11580156151dd573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561525657600080fd5b505af115801561526a573d6000803e3d6000fd5b505050507f689a5a5cb55e795ffe4cd8b419cd3bb0a3373974c54d25f64e734d7388b93e9b601f60019054906101000a90046001600160a01b031660286040516152b592919061a974565b60405180910390a1601f546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561533657600080fd5b505af115801561534a573d6000803e3d6000fd5b50506023546020546040516001600160a01b039283169450911691507fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e03590615398908a90899060289061a996565b60405180910390a36022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561541557600080fd5b505af1158015615429573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f5272d2fee39bff41b2e763562526315906046373ce08a7bacf76c3080d731ff09150615471908990889060289061a996565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156154d257600080fd5b505af11580156154e6573d6000803e3d6000fd5b50506022546020546040517f6f8728ad0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450636f8728ad935061554192909116908a9089908b9060289060040161a893565b600060405180830381600087803b15801561555b57600080fd5b505af115801561556f573d6000803e3d6000fd5b50506023546020546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401611537565b60606015805480602002602001604051908101604052809291908181526020018280548015610e6a576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610e4c575050505050905090565b6024805460405163ca669fa760e01b81526001600160a01b039091166004820152620186a091600091737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b15801561566a57600080fd5b505af115801561567e573d6000803e3d6000fd5b505060248054604080516001600160a01b03909216928201929092527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061576d919060040161a4eb565b600060405180830381600087803b15801561578757600080fd5b505af115801561579b573d6000803e3d6000fd5b50506022546025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b15801561580f57600080fd5b505af11580156133e2573d6000803e3d6000fd5b600061582d61a084565b615838848483615a04565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015b60006040518083038186803b1580156158ae57600080fd5b505afa1580156133e2573d6000803e3d6000fd5b6040517fa59828850000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063a5982885906024015b60006040518083038186803b15801561592857600080fd5b505afa1580156127ba573d6000803e3d6000fd5b6040517f0c9fd5810000000000000000000000000000000000000000000000000000000081528115156004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90630c9fd58190602401615910565b6040517f515361f60000000000000000000000000000000000000000000000000000000081526001600160a01b03808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f690604401615896565b6159f761a084565b6127ba8585858486615a7f565b600080615a118584615b7f565b9050615a746040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f78790000008152508286604051602001615a5f92919061a8df565b60405160208183030381529060405285615b8b565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015615af157600080fd5b505af1925050508015615b02575060015b615b1757615b1287878787615bb9565b612b9a565b615b2387878787615bb9565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015615b5e57600080fd5b505af1158015615b72573d6000803e3d6000fd5b5050505050505050505050565b6000615a788383615bd2565b60c08101515160009015615baf57615ba884848460c00151615bed565b9050615a78565b615ba88484615d93565b6000615bc58483615e7e565b90506127ba858285615e8a565b6000615bde8383616254565b615a7883836020015184615b8b565b600080615bf8616264565b90506000615c068683616337565b90506000615c1d82606001518360200151856167dd565b90506000615c2d838389896169ef565b90506000615c3a8261786c565b602081015181519192509060030b15615cad57898260400151604051602001615c6492919061a9c1565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252615ca49160040161a4eb565b60405180910390fd5b6000615cf06040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001617a3b565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90615d4390849060040161a4eb565b602060405180830381865afa158015615d60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615d84919061a78d565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590615de890879060040161a4eb565b600060405180830381865afa158015615e05573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615e2d919081019061aafb565b90506000615e5b8285604051602001615e4792919061ab30565b604051602081830303815290604052617c3b565b90506001600160a01b038116615838578484604051602001615c6492919061ab5f565b6000615bde8383617c4e565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa158015615f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615f4a919061a685565b9050806160f1576000615f5c86617c5a565b604080518082018252600581527f352e302e3000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615fe7905b60408051808201825260008082526020918201528151808301909252845182528085019082015290617d52565b80615ff3575060008451115b15616076576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef2869061603f908890889060040161a8df565b600060405180830381600087803b15801561605957600080fd5b505af115801561606d573d6000803e3d6000fd5b505050506160eb565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b1580156160d257600080fd5b505af11580156160e6573d6000803e3d6000fd5b505050505b506127ba565b8060006160fd82617c5a565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061615f90615fba565b8061616b575060008551115b156161f0576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d906161b9908a908a908a9060040161ac0a565b600060405180830381600087803b1580156161d357600080fd5b505af11580156161e7573d6000803e3d6000fd5b50505050612b9a565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b158015615b5e57600080fd5b61626082826000617d66565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c906162eb90849060040161ac3b565b600060405180830381865afa158015616308573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616330919081019061ac82565b9250505090565b6163696040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d90506163b46040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6163bd85617e69565b602082015260006163cd8661824e565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561640f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616437919081019061ac82565b86838560200151604051602001616451949392919061accb565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb11906164a990859060040161a4eb565b600060405180830381865afa1580156164c6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526164ee919081019061ac82565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f69061653690849060040161adcf565b602060405180830381865afa158015616553573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616577919061a76b565b61658c5781604051602001615c64919061ae21565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906165d190849060040161aeb3565b600060405180830381865afa1580156165ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616616919081019061ac82565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f69061665d90849060040161af05565b602060405180830381865afa15801561667a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061669e919061a76b565b15616733576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac8906166e890849060040161af05565b600060405180830381865afa158015616705573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261672d919081019061ac82565b60408501525b846001600160a01b03166349c4fac8828660000151604051602001616758919061af57565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161678492919061afc3565b600060405180830381865afa1580156167a1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526167c9919081019061ac82565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816167f95790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106168595761685961afe8565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106168ad576168ad61afe8565b6020026020010181905250846040516020016168c9919061b017565b604051602081830303815290604052816002815181106168eb576168eb61afe8565b602002602001018190525082604051602001616907919061b083565b604051602081830303815290604052816003815181106169295761692961afe8565b6020026020010181905250600061693f8261786c565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506169d090604080518082018252600080825260209182015281518083019092528451825280850190820152906184d1565b6169e55785604051602001615c64919061b0c4565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616a3f565b511590565b616bb357826020015115616afb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401615ca4565b8260c0015115616bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401615ca4565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081616bcc57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616c279061b155565b935060ff1681518110616c3c57616c3c61afe8565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616c8d919061b174565b604051602081830303815290604052828280616ca89061b155565b935060ff1681518110616cbd57616cbd61afe8565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280616d0a9061b155565b935060ff1681518110616d1f57616d1f61afe8565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280616d6c9061b155565b935060ff1681518110616d8157616d8161afe8565b60200260200101819052508760200151828280616d9d9061b155565b935060ff1681518110616db257616db261afe8565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280616dff9061b155565b935060ff1681518110616e1457616e1461afe8565b602090810291909101015287518282616e2c8161b155565b935060ff1681518110616e4157616e4161afe8565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280616e8e9061b155565b935060ff1681518110616ea357616ea361afe8565b6020026020010181905250616eb746618532565b8282616ec28161b155565b935060ff1681518110616ed757616ed761afe8565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280616f249061b155565b935060ff1681518110616f3957616f3961afe8565b602002602001018190525086828280616f519061b155565b935060ff1681518110616f6657616f6661afe8565b602090810291909101015285511561708d5760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282616fb78161b155565b935060ff1681518110616fcc57616fcc61afe8565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061701c90899060040161a4eb565b600060405180830381865afa158015617039573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617061919081019061ac82565b828261706c8161b155565b935060ff16815181106170815761708161afe8565b60200260200101819052505b84602001511561715d5760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826170d68161b155565b935060ff16815181106170eb576170eb61afe8565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806171389061b155565b935060ff168151811061714d5761714d61afe8565b6020026020010181905250617324565b617195616a3a8660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6172285760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826171d88161b155565b935060ff16815181106171ed576171ed61afe8565b60200260200101819052508460a0015160405160200161720d919061b017565b6040516020818303038152906040528282806171389061b155565b8460c0015115801561726b57506040808901518151808301835260008082526020918201528251808401909352815183529081019082015261726990511590565b155b156173245760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826172af8161b155565b935060ff16815181106172c4576172c461afe8565b60200260200101819052506172d8886185d2565b6040516020016172e8919061b017565b6040516020818303038152906040528282806173039061b155565b935060ff16815181106173185761731861afe8565b60200260200101819052505b6040808601518151808301835260008082526020918201528251808401909352815183529081019082015261735890511590565b6173ed5760408051808201909152600b81527f2d2d72656c6179657249640000000000000000000000000000000000000000006020820152828261739b8161b155565b935060ff16815181106173b0576173b061afe8565b602002602001018190525084604001518282806173cc9061b155565b935060ff16815181106173e1576173e161afe8565b60200260200101819052505b60608501511561750e5760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826174368161b155565b935060ff168151811061744b5761744b61afe8565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa1580156174ba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526174e2919081019061ac82565b82826174ed8161b155565b935060ff16815181106175025761750261afe8565b60200260200101819052505b60e085015151156175b55760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826175588161b155565b935060ff168151811061756d5761756d61afe8565b60200260200101819052506175898560e0015160000151618532565b82826175948161b155565b935060ff16815181106175a9576175a961afe8565b60200260200101819052505b60e0850151602001511561765f5760408051808201909152600a81527f2d2d676173507269636500000000000000000000000000000000000000000000602082015282826176028161b155565b935060ff16815181106176175761761761afe8565b60200260200101819052506176338560e0015160200151618532565b828261763e8161b155565b935060ff16815181106176535761765361afe8565b60200260200101819052505b60e085015160400151156177095760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826176ac8161b155565b935060ff16815181106176c1576176c161afe8565b60200260200101819052506176dd8560e0015160400151618532565b82826176e88161b155565b935060ff16815181106176fd576176fd61afe8565b60200260200101819052505b60e085015160600151156177b35760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826177568161b155565b935060ff168151811061776b5761776b61afe8565b60200260200101819052506177878560e0015160600151618532565b82826177928161b155565b935060ff16815181106177a7576177a761afe8565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156177d1576177d161a4fe565b60405190808252806020026020018201604052801561780457816020015b60608152602001906001900390816177ef5790505b50905060005b8260ff168160ff16101561785d57838160ff168151811061782d5761782d61afe8565b6020026020010151828260ff168151811061784a5761784a61afe8565b602090810291909101015260010161780a565b5093505050505b949350505050565b6178936040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916179199186910161b1df565b600060405180830381865afa158015617936573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261795e919081019061ac82565b9050600061796c86836190c1565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b815260040161799c919061a3dd565b6000604051808303816000875af11580156179bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526179e3919081019061b226565b805190915060030b158015906179fc5750602081015151155b8015617a0b5750604081015151155b156169e55781600081518110617a2357617a2361afe8565b6020026020010151604051602001615c64919061b2dc565b60606000617a708560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150617aa79082905b90619216565b15617c04576000617b2482617b1e84617b18617aea8a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b9061923d565b9061929f565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617b88908290619216565b15617bf257604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617bef905b8290619324565b90505b617bfb8161934a565b92505050615a78565b8215617c1d578484604051602001615c6492919061b4c8565b5050604080516020810190915260008152615a78565b509392505050565b6000808251602084016000f09392505050565b61626082826001617d66565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691617ccf919061b56f565b600060405180830381855afa9150503d8060008114617d0a576040519150601f19603f3d011682016040523d82523d6000602084013e617d0f565b606091505b5091509150818015617d22575060208151115b15617d3b5780806020019051810190617864919061ac82565b505060408051602081019091526000815292915050565b6000617d5e83836193b3565b159392505050565b8160a0015115617d7557505050565b6000617d8284848461948e565b90506000617d8f8261786c565b602081015181519192509060030b158015617e2b5750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617e2b90604080518082018252600080825260209182015281518083019092528451825280850190820152617aa1565b15617e3857505050505050565b60408201515115617e58578160400151604051602001615c64919061b58b565b80604051602001615c64919061b5e9565b60606000617e9e8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617f03905b82906184d1565b15617f7257604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a7890617f6d908390619a29565b61934a565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617fd4905b8290619ab3565b6001036180a157604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261803a90617be8565b50604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a7890617f6d905b8390619324565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261810090617efc565b1561823757604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618168908390619b4d565b90506000816001835161817b919061a758565b8151811061818b5761818b61afe8565b6020026020010151905061822e617f6d6182016040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b60408051808201825260008082526020918201528151808301909252855182528086019082015290619a29565b95945050505050565b82604051602001615c64919061b654565b50919050565b606060006182838360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506182e590617efc565b156182f357615a788161934a565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261835290617fcd565b6001036183bc57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152615a7890617f6d9061809a565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261841b90617efc565b1561823757604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290618483908390619b4d565b90506001815111156184bf57806002825161849e919061a758565b815181106184ae576184ae61afe8565b602002602001015192505050919050565b5082604051602001615c64919061b654565b8051825160009111156184e65750600061583c565b815183516020850151600092916184fc9161b732565b618506919061a758565b90508260200151810361851d57600191505061583c565b82516020840151819020912014905092915050565b6060600061853f83619bf2565b600101905060008167ffffffffffffffff81111561855f5761855f61a4fe565b6040519080825280601f01601f191660200182016040528015618589576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461859357509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e534544000000000000000000000000000000000000000000008184019081528551808701875283815284019290925284518086019095525184529083015260609161865e905b8290617d52565b1561869e57505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e73650000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526186fd90618657565b1561873d57505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d495400000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261879c90618657565b156187dc57505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261883b90618657565b806188a05750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188a090618657565b156188e057505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261893f90618657565b806189a45750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189a490618657565b156189e457505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a4390618657565b80618aa85750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618aa890618657565b15618ae857505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618b4790618657565b80618bac5750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618bac90618657565b15618bec57505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c4b90618657565b15618c8b57505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618cea90618657565b15618d2a57505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d8990618657565b15618dc957505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e2890618657565b15618e6857505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ec790618657565b15618f0757505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f6690618657565b80618fcb5750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618fcb90618657565b1561900b57505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e310000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261906a90618657565b156190aa57505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151615c64929060200161b745565b60608060005b845181101561914c57818582815181106190e3576190e361afe8565b60200260200101516040516020016190fc92919061ab30565b60405160208183030381529060405291506001855161911b919061a758565b81146191445781604051602001619132919061b8ae565b60405160208183030381529060405291505b6001016190c7565b5060408051600380825260808201909252600091816020015b606081526020019060019003908161916557905050905083816000815181106191905761919061afe8565b60200260200101819052506040518060400160405280600281526020017f2d63000000000000000000000000000000000000000000000000000000000000815250816001815181106191e4576191e461afe8565b602002602001018190525081816002815181106192035761920361afe8565b6020908102919091010152949350505050565b60208083015183518351928401516000936192349291849190619cd4565b14159392505050565b6040805180820190915260008082526020820152600061926f8460000151856020015185600001518660200151619de5565b9050836020015181619281919061a758565b8451859061929090839061a758565b90525060208401525090919050565b60408051808201909152600080825260208201528151835110156192c457508161583c565b60208083015190840151600191146192eb5750815160208481015190840151829020919020145b801561931c5782518451859061930290839061a758565b905250825160208501805161931890839061b732565b9052505b509192915050565b6040805180820190915260008082526020820152619343838383619f05565b5092915050565b60606000826000015167ffffffffffffffff81111561936b5761936b61a4fe565b6040519080825280601f01601f191660200182016040528015619395576020820181803683370190505b50905060006020820190506193438185602001518660000151619fb0565b81518151600091908111156193c6575081515b6020808501519084015160005b8381101561947f578251825180821461944f57600019602087101561942e5760018461940089602061a758565b61940a919061b732565b61941590600861b8ef565b61942090600261b9ed565b61942a919061a758565b1990505b818116838216818103911461944c57975061583c9650505050505050565b50505b61945a60208661b732565b945061946760208561b732565b93505050602081619478919061b732565b90506193d3565b50845186516169e5919061b9f9565b6060600061949a616264565b6040805160ff808252612000820190925291925060009190816020015b60608152602001906001900390816194b757905050905060006040518060400160405280600381526020017f6e707800000000000000000000000000000000000000000000000000000000008152508282806195129061b155565b935060ff16815181106195275761952761afe8565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001619578919061ba19565b6040516020818303038152906040528282806195939061b155565b935060ff16815181106195a8576195a861afe8565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806195f59061b155565b935060ff168151811061960a5761960a61afe8565b602002602001018190525082604051602001619626919061b083565b6040516020818303038152906040528282806196419061b155565b935060ff16815181106196565761965661afe8565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e7472616374000000000000000000000000000000000000000000008152508282806196a39061b155565b935060ff16815181106196b8576196b861afe8565b60200260200101819052506196cd878461a02a565b82826196d88161b155565b935060ff16815181106196ed576196ed61afe8565b6020908102919091010152855151156197995760408051808201909152600b81527f2d2d7265666572656e63650000000000000000000000000000000000000000006020820152828261973f8161b155565b935060ff16815181106197545761975461afe8565b602002602001018190525061976d86600001518461a02a565b82826197788161b155565b935060ff168151811061978d5761978d61afe8565b60200260200101819052505b8560800151156198075760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826197e28161b155565b935060ff16815181106197f7576197f761afe8565b602002602001018190525061986d565b841561986d5760408051808201909152601281527f2d2d726571756972655265666572656e636500000000000000000000000000006020820152828261984c8161b155565b935060ff16815181106198615761986161afe8565b60200260200101819052505b604086015151156199095760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826198b78161b155565b935060ff16815181106198cc576198cc61afe8565b602002602001018190525085604001518282806198e89061b155565b935060ff16815181106198fd576198fd61afe8565b60200260200101819052505b8560600151156199735760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826199528161b155565b935060ff16815181106199675761996761afe8565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156199915761999161a4fe565b6040519080825280602002602001820160405280156199c457816020015b60608152602001906001900390816199af5790505b50905060005b8260ff168160ff161015619a1d57838160ff16815181106199ed576199ed61afe8565b6020026020010151828260ff1681518110619a0a57619a0a61afe8565b60209081029190910101526001016199ca565b50979650505050505050565b6040805180820190915260008082526020820152815183511015619a4e57508161583c565b81518351602085015160009291619a649161b732565b619a6e919061a758565b60208401519091506001908214619a8f575082516020840151819020908220145b8015619aaa57835185518690619aa690839061a758565b9052505b50929392505050565b6000808260000151619ad78560000151866020015186600001518760200151619de5565b619ae1919061b732565b90505b83516020850151619af5919061b732565b81116193435781619b058161ba5e565b9250508260000151619b3c856020015183619b20919061a758565b8651619b2c919061a758565b8386600001518760200151619de5565b619b46919061b732565b9050619ae4565b60606000619b5b8484619ab3565b619b6690600161b732565b67ffffffffffffffff811115619b7e57619b7e61a4fe565b604051908082528060200260200182016040528015619bb157816020015b6060815260200190600190039081619b9c5790505b50905060005b8151811015617c3357619bcd617f6d8686619324565b828281518110619bdf57619bdf61afe8565b6020908102919091010152600101619bb7565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619c3b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619c67576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310619c8557662386f26fc10000830492506010015b6305f5e1008310619c9d576305f5e100830492506008015b6127108310619cb157612710830492506004015b60648310619cc3576064830492506002015b600a831061583c5760010192915050565b600080858411619ddb5760208411619d875760008415619d1f576001619cfb86602061a758565b619d0690600861b8ef565b619d1190600261b9ed565b619d1b919061a758565b1990505b8351811685619d2e898961b732565b619d38919061a758565b805190935082165b818114619d7257878411619d5a5787945050505050617864565b83619d648161ba78565b945050828451169050619d40565b619d7c878561b732565b945050505050617864565b838320619d94858861a758565b619d9e908761b732565b91505b858210619dd957848220808203619dc657619dbc868461b732565b9350505050617864565b619dd160018461a758565b925050619da1565b505b5092949350505050565b60008381868511619ef05760208511619e9f5760008515619e31576001619e0d87602061a758565b619e1890600861b8ef565b619e2390600261b9ed565b619e2d919061a758565b1990505b84518116600087619e428b8b61b732565b619e4c919061a758565b855190915083165b828114619e9157818610619e7957619e6c8b8b61b732565b9650505050505050617864565b85619e838161ba5e565b965050838651169050619e54565b859650505050505050617864565b508383206000905b619eb1868961a758565b8211619eee57858320808203619ecd5783945050505050617864565b619ed860018561b732565b9350508180619ee69061ba5e565b925050619ea7565b505b619efa878761b732565b979650505050505050565b60408051808201909152600080825260208201526000619f378560000151866020015186600001518760200151619de5565b602080870180519186019190915251909150619f53908261a758565b835284516020860151619f66919061b732565b8103619f755760008552619fa7565b83518351619f83919061b732565b85518690619f9290839061a758565b9052508351619fa1908261b732565b60208601525b50909392505050565b60208110619fe85781518352619fc760208461b732565b9250619fd460208361b732565b9150619fe160208261a758565b9050619fb0565b600019811561a017576001619ffe83602061a758565b61a00a9061010061b9ed565b61a014919061a758565b90505b9151835183169219169190911790915250565b6060600061a0388484616337565b805160208083015160405193945061a0529390910161ba8f565b60405160208183030381529060405291505092915050565b610c9f8061bae883390190565b610f2a8061c78783390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a0c761a0cc565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a0c76040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a17e5783516001600160a01b031683526020938401939092019160010161a157565b509095945050505050565b60005b8381101561a1a457818101518382015260200161a18c565b50506000910152565b6000815180845261a1c581602086016020860161a189565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a2d5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a2bb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a2a584865161a1ad565b602095860195909450929092019160010161a26b565b50919750505060209485019492909201915060010161a201565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a3355781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a2f5565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a2d5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a3ab604088018261a1ad565b905060208201519150868103602088015261a3c6818361a2e1565b96505050602093840193919091019060010161a367565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a2d5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261a43f85835161a1ad565b9450602093840193919091019060010161a405565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a2d5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a4d5604087018261a2e1565b955050602093840193919091019060010161a47c565b602081526000615a78602083018461a1ad565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061a54157607f821691505b602082108103618248577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f82111561a5c157806000526020600020601f840160051c8101602085101561a5a15750805b601f840160051c820191505b818110156127ba576000815560010161a5ad565b505050565b815167ffffffffffffffff81111561a5e05761a5e061a4fe565b61a5f48161a5ee845461a52d565b8461a57a565b6020601f82116001811461a628576000831561a6105750848201515b600019600385901b1c1916600184901b1784556127ba565b600084815260208120601f198516915b8281101561a658578785015182556020948501946001909201910161a638565b508482101561a6765786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60006020828403121561a69757600080fd5b5051919050565b6001600160a01b038416815282602082015260606040820152600061822e606083018461a1ad565b828152604060208201526000617864604083018461a1ad565b6001600160a01b0386541681526001600160a01b038516602082015283604082015260a06060820152600061a71760a083018561a1ad565b90508260808301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561583c5761583c61a729565b60006020828403121561a77d57600080fd5b81518015158114615a7857600080fd5b60006020828403121561a79f57600080fd5b81516001600160a01b0381168114615a7857600080fd5b6001600160a01b0381541682526001600160a01b03600182015416602083015260028101546040830152600060038201608060608501526000815461a7fa8161a52d565b806080880152600182166000811461a819576001811461a8535761a887565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660a089015260a082151560051b890101935061a887565b84600052602060002060005b8381101561a87e5781548a820160a0015260019091019060200161a85f565b890160a0019450505b50919695505050505050565b6001600160a01b038616815284602082015260a06040820152600061a8bb60a083018661a1ad565b846060840152828103608084015261a8d3818561a7b6565b98975050505050505050565b6001600160a01b0383168152604060208201526000617864604083018461a1ad565b6001600160a01b0386511681526001600160a01b038516602082015283604082015260a06060820152600061a71760a083018561a1ad565b60008261a96f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b0383168152604060208201526000617864604083018461a7b6565b83815260606020820152600061a9af606083018561a1ad565b82810360408401526169e5818561a7b6565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a9f981601a85016020880161a189565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161aa3681601c84016020880161a189565b01601c01949350505050565b6040516060810167ffffffffffffffff8111828210171561aa655761aa6561a4fe565b60405290565b60008067ffffffffffffffff84111561aa865761aa8661a4fe565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561aab55761aab561a4fe565b60405283815290508082840185101561aacd57600080fd5b617c3384602083018561a189565b600082601f83011261aaec57600080fd5b615a788383516020850161aa6b565b60006020828403121561ab0d57600080fd5b815167ffffffffffffffff81111561ab2457600080fd5b6158388482850161aadb565b6000835161ab4281846020880161a189565b83519083019061ab5681836020880161a189565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ab9781601a85016020880161a189565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161abd481603384016020880161a189565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b038316602082015260606040820152600061822e606083018461a1ad565b60408152600b60408201527f464f554e4452595f4f55540000000000000000000000000000000000000000006060820152608060208201526000615a78608083018461a1ad565b60006020828403121561ac9457600080fd5b815167ffffffffffffffff81111561acab57600080fd5b8201601f8101841361acbc57600080fd5b6158388482516020840161aa6b565b6000855161acdd818460208a0161a189565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161ad17816001840160208a0161a189565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161ad5581600284016020890161a189565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161ad9781600284016020880161a189565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061ade2604083018461a1ad565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161ae5981601f85016020870161a189565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061aec6604083018461a1ad565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061af18604083018461a1ad565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161af8f81601485016020870161a189565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061afd6604083018561a1ad565b8281036020840152615a74818561a1ad565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b04f81600185016020870161a189565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b09581846020870161a189565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b14881604b85016020870161a189565b91909101604b0192915050565b600060ff821660ff810361b16b5761b16b61a729565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b1d281602985016020870161a189565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f50415448000000000000000000006060820152608060208201526000615a78608083018461a1ad565b60006020828403121561b23857600080fd5b815167ffffffffffffffff81111561b24f57600080fd5b82016060818503121561b26157600080fd5b61b26961aa42565b81518060030b811461b27a57600080fd5b8152602082015167ffffffffffffffff81111561b29657600080fd5b61b2a28682850161aadb565b602083015250604082015167ffffffffffffffff81111561b2c257600080fd5b61b2ce8682850161aadb565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b33a81602185016020870161a189565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b52681602185016020880161a189565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b56381602e84016020880161a189565b01602e01949350505050565b6000825161b58181846020870161a189565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b1d281602985016020870161a189565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b64781602285016020870161a189565b9190910160220192915050565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b68c81600e85016020870161a189565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b8082018082111561583c5761583c61a729565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b77d81601885016020880161a189565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b7ba81601c84016020880161a189565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161b8c081846020870161a189565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b808202811582820484141761583c5761583c61a729565b6001815b600184111561b9415780850481111561b9255761b92561a729565b600184161561b93357908102905b60019390931c92800261b90a565b935093915050565b60008261b9585750600161583c565b8161b9655750600061583c565b816001811461b97b576002811461b9855761b9a1565b600191505061583c565b60ff84111561b9965761b99661a729565b50506001821b61583c565b5060208310610133831016604e8410600b841016171561b9c4575081810a61583c565b61b9d1600019848461b906565b806000190482111561b9e55761b9e561a729565b029392505050565b6000615a78838361b949565b81810360008312801583831316838312821617156193435761934361a729565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161ba5181601c85016020870161a189565b91909101601c0192915050565b6000600019820361ba715761ba7161a729565b5060010190565b60008161ba875761ba8761a729565b506000190190565b6000835161baa181846020880161a189565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161badb81600184016020880161a189565b0160010194935050505056fe608060405234801561001057600080fd5b50604051610c9f380380610c9f83398101604081905261002f9161010d565b8181600361003d83826101ff565b50600461004a82826101ff565b50505050506102bd565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261007b57600080fd5b81516001600160401b0381111561009457610094610054565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610054565b6040528181528382016020018510156100da57600080fd5b60005b828110156100f9576020818601810151838301820152016100dd565b506000918101602001919091529392505050565b6000806040838503121561012057600080fd5b82516001600160401b0381111561013657600080fd5b6101428582860161006a565b602085015190935090506001600160401b0381111561016057600080fd5b61016c8582860161006a565b9150509250929050565b600181811c9082168061018a57607f821691505b6020821081036101aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101fa57806000526020600020601f840160051c810160208510156101d75750805b601f840160051c820191505b818110156101f757600081556001016101e3565b50505b505050565b81516001600160401b0381111561021857610218610054565b61022c816102268454610176565b846101b0565b6020601f82116001811461026057600083156102485750848201515b600019600385901b1c1916600184901b1784556101f7565b600084815260208120601f198516915b828110156102905787850151825560209485019460019092019101610270565b50848210156102ae5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6109d3806102cc6000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c806340c10f191161007657806395d89b411161005b57806395d89b4114610183578063a9059cbb1461018b578063dd62ed3e1461019e57600080fd5b806340c10f191461013857806370a082311461014d57600080fd5b806318160ddd116100a757806318160ddd1461010457806323b872dd14610116578063313ce5671461012957600080fd5b806306fdde03146100c3578063095ea7b3146100e1575b600080fd5b6100cb6101e4565b6040516100d891906107bf565b60405180910390f35b6100f46100ef366004610854565b610276565b60405190151581526020016100d8565b6002545b6040519081526020016100d8565b6100f461012436600461087e565b610290565b604051601281526020016100d8565b61014b610146366004610854565b6102b4565b005b61010861015b3660046108bb565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100cb6102c2565b6100f4610199366004610854565b6102d1565b6101086101ac3660046108dd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6060600380546101f390610910565b80601f016020809104026020016040519081016040528092919081815260200182805461021f90610910565b801561026c5780601f106102415761010080835404028352916020019161026c565b820191906000526020600020905b81548152906001019060200180831161024f57829003601f168201915b5050505050905090565b6000336102848185856102df565b60019150505b92915050565b60003361029e8582856102f1565b6102a98585856103c5565b506001949350505050565b6102be8282610470565b5050565b6060600480546101f390610910565b6000336102848185856103c5565b6102ec83838360016104cc565b505050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146103bf57818110156103b0576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101829052604481018390526064015b60405180910390fd5b6103bf848484840360006104cc565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316610415576040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff8216610465576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102ec838383610614565b73ffffffffffffffffffffffffffffffffffffffff82166104c0576040517fec442f05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b6102be60008383610614565b73ffffffffffffffffffffffffffffffffffffffff841661051c576040517fe602df05000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff831661056c576040517f94280d62000000000000000000000000000000000000000000000000000000008152600060048201526024016103a7565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260016020908152604080832093871683529290522082905580156103bf578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161060691815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff831661064c5780600260008282546106419190610963565b909155506106fe9050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902054818110156106d2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260248101829052604481018390526064016103a7565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661072757600280548290039055610753565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107b291815260200190565b60405180910390a3505050565b602081526000825180602084015260005b818110156107ed57602081860181015160408684010152016107d0565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461084f57600080fd5b919050565b6000806040838503121561086757600080fd5b6108708361082b565b946020939093013593505050565b60008060006060848603121561089357600080fd5b61089c8461082b565b92506108aa6020850161082b565b929592945050506040919091013590565b6000602082840312156108cd57600080fd5b6108d68261082b565b9392505050565b600080604083850312156108f057600080fd5b6108f98361082b565b91506109076020840161082b565b90509250929050565b600181811c9082168061092457607f821691505b60208210810361095d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8082018082111561028a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220a043c41353215fce25ecb67a8a4f6f724aaa86dea8dcb0a6975bfb1f10ff3beb64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610f06806100246000396000f3fe60806040526004361061006e5760003560e01c8063c51316911161004b578063c5131691146100d5578063c9028a36146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a214610077578063676cc054146100975780636ed70169146100c057005b3661007557005b005b34801561008357600080fd5b50610075610092366004610709565b610148565b6100aa6100a5366004610745565b6101de565b6040516100b79190610840565b60405180910390f35b3480156100cc57600080fd5b5061007561023f565b3480156100e157600080fd5b506100756100f0366004610709565b610274565b34801561010157600080fd5b50610075610110366004610853565b61034f565b6100756101233660046109b3565b61038b565b34801561013457600080fd5b50610075610143366004610a9f565b6103cf565b610150610404565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610447565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b60607fd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a35250161020e6020860186610b89565b848460405161021f93929190610bed565b60405180910390a1506040805160208101909152600081525b9392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61027c610404565b6000610289600285610c26565b9050806000036102c5576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102e773ffffffffffffffffffffffffffffffffffffffff8416338484610447565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f689a5a5cb55e795ffe4cd8b419cd3bb0a3373974c54d25f64e734d7388b93e9b3382604051610380929190610c61565b60405180910390a150565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa33348585856040516103c2959493929190610d53565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103c29493929190610ddd565b600260005403610440576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104dc9085906104e2565b50505050565b600061050473ffffffffffffffffffffffffffffffffffffffff84168361057d565b905080516000141580156105295750808060200190518101906105279190610e97565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061023883836000846000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105b09190610eb4565b60006040518083038185875af1925050503d80600081146105ed576040519150601f19603f3d011682016040523d82523d6000602084013e6105f2565b606091505b509150915061060286838361060c565b9695505050505050565b6060826106215761061c8261069b565b610238565b8151158015610645575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610694576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610574565b5080610238565b8051156106ab5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461070457600080fd5b919050565b60008060006060848603121561071e57600080fd5b8335925061072e602085016106e0565b915061073c604085016106e0565b90509250925092565b6000806000838503604081121561075b57600080fd5b602081121561076957600080fd5b50839250602084013567ffffffffffffffff81111561078757600080fd5b8401601f8101861361079857600080fd5b803567ffffffffffffffff8111156107af57600080fd5b8660208284010111156107c157600080fd5b939660209190910195509293505050565b60005b838110156107ed5781810151838201526020016107d5565b50506000910152565b6000815180845261080e8160208601602086016107d2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061023860208301846107f6565b60006020828403121561086557600080fd5b813567ffffffffffffffff81111561087c57600080fd5b82016080818503121561023857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156109045761090461088e565b604052919050565b600082601f83011261091d57600080fd5b813567ffffffffffffffff8111156109375761093761088e565b61096860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108bd565b81815284602083860101111561097d57600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106dd57600080fd5b80356107048161099a565b6000806000606084860312156109c857600080fd5b833567ffffffffffffffff8111156109df57600080fd5b6109eb8682870161090c565b935050602084013591506040840135610a038161099a565b809150509250925092565b600067ffffffffffffffff821115610a2857610a2861088e565b5060051b60200190565b600082601f830112610a4357600080fd5b8135610a56610a5182610a0e565b6108bd565b8082825260208201915060208360051b860101925085831115610a7857600080fd5b602085015b83811015610a95578035835260209283019201610a7d565b5095945050505050565b600080600060608486031215610ab457600080fd5b833567ffffffffffffffff811115610acb57600080fd5b8401601f81018613610adc57600080fd5b8035610aea610a5182610a0e565b8082825260208201915060208360051b850101925088831115610b0c57600080fd5b602084015b83811015610b4e57803567ffffffffffffffff811115610b3057600080fd5b610b3f8b60208389010161090c565b84525060209283019201610b11565b509550505050602084013567ffffffffffffffff811115610b6e57600080fd5b610b7a86828701610a32565b92505061073c604085016109a8565b600060208284031215610b9b57600080fd5b610238826106e0565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff84168152604060208201526000610c1d604083018486610ba4565b95945050505050565b600082610c5c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c9f836106e0565b16604082015273ffffffffffffffffffffffffffffffffffffffff610cc6602084016106e0565b166060820152600080604084013590508060808401525060608301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610d1257600080fd5b830160208101903567ffffffffffffffff811115610d2f57600080fd5b803603821315610d3e57600080fd5b608060a085015261060260c085018284610ba4565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d8860a08301866107f6565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610dd3578151865260209586019590910190600101610db5565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e70577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e5b8583516107f6565b94506020938401939190910190600101610e21565b505050508281036040840152610e868186610da1565b915050610c1d606083018415159052565b600060208284031215610ea957600080fd5b81516102388161099a565b60008251610ec68184602087016107d2565b919091019291505056fea2646970667358221220a40191c0a0256363e6edb7673accb387b7a3597d9a76c64faccadc4ce57c234664736f6c634300081a00335a657461436f6e6e6563746f724e617469766555706772616465546573742e736f6ca26469706673582212204c867892b9d183b994f3fd8c7c1abbb09bf8135892fed7586f48d4232cbc8db664736f6c634300081a0033", } // ZetaConnectorNativeTestABI is the input ABI used to generate the binding from. @@ -943,6 +943,48 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactorSession) TestWi return _ZetaConnectorNativeTest.Contract.TestWithdrawAndCallReceiveNoParams(&_ZetaConnectorNativeTest.TransactOpts) } +// TestWithdrawAndCallReceiveOnCall is a paid mutator transaction binding the contract method 0xb0a64d03. +// +// Solidity: function testWithdrawAndCallReceiveOnCall() returns() +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactor) TestWithdrawAndCallReceiveOnCall(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNativeTest.contract.Transact(opts, "testWithdrawAndCallReceiveOnCall") +} + +// TestWithdrawAndCallReceiveOnCall is a paid mutator transaction binding the contract method 0xb0a64d03. +// +// Solidity: function testWithdrawAndCallReceiveOnCall() returns() +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestSession) TestWithdrawAndCallReceiveOnCall() (*types.Transaction, error) { + return _ZetaConnectorNativeTest.Contract.TestWithdrawAndCallReceiveOnCall(&_ZetaConnectorNativeTest.TransactOpts) +} + +// TestWithdrawAndCallReceiveOnCall is a paid mutator transaction binding the contract method 0xb0a64d03. +// +// Solidity: function testWithdrawAndCallReceiveOnCall() returns() +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactorSession) TestWithdrawAndCallReceiveOnCall() (*types.Transaction, error) { + return _ZetaConnectorNativeTest.Contract.TestWithdrawAndCallReceiveOnCall(&_ZetaConnectorNativeTest.TransactOpts) +} + +// TestWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall is a paid mutator transaction binding the contract method 0x95665330. +// +// Solidity: function testWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall() returns() +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactor) TestWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNativeTest.contract.Transact(opts, "testWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall") +} + +// TestWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall is a paid mutator transaction binding the contract method 0x95665330. +// +// Solidity: function testWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall() returns() +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestSession) TestWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall() (*types.Transaction, error) { + return _ZetaConnectorNativeTest.Contract.TestWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall(&_ZetaConnectorNativeTest.TransactOpts) +} + +// TestWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall is a paid mutator transaction binding the contract method 0x95665330. +// +// Solidity: function testWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall() returns() +func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestTransactorSession) TestWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall() (*types.Transaction, error) { + return _ZetaConnectorNativeTest.Contract.TestWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall(&_ZetaConnectorNativeTest.TransactOpts) +} + // TestWithdrawAndRevert is a paid mutator transaction binding the contract method 0xde1cb76c. // // Solidity: function testWithdrawAndRevert() returns() @@ -2117,12 +2159,14 @@ func (it *ZetaConnectorNativeTestReceivedOnCallIterator) Close() error { // ZetaConnectorNativeTestReceivedOnCall represents a ReceivedOnCall event raised by the ZetaConnectorNativeTest contract. type ZetaConnectorNativeTestReceivedOnCall struct { - Raw types.Log // Blockchain specific contextual infos + Sender common.Address + Message []byte + Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedOnCall is a free log retrieval operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// FilterReceivedOnCall is a free log retrieval operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) FilterReceivedOnCall(opts *bind.FilterOpts) (*ZetaConnectorNativeTestReceivedOnCallIterator, error) { logs, sub, err := _ZetaConnectorNativeTest.contract.FilterLogs(opts, "ReceivedOnCall") @@ -2132,9 +2176,9 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) FilterReceivedO return &ZetaConnectorNativeTestReceivedOnCallIterator{contract: _ZetaConnectorNativeTest.contract, event: "ReceivedOnCall", logs: logs, sub: sub}, nil } -// WatchReceivedOnCall is a free log subscription operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// WatchReceivedOnCall is a free log subscription operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) WatchReceivedOnCall(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNativeTestReceivedOnCall) (event.Subscription, error) { logs, sub, err := _ZetaConnectorNativeTest.contract.WatchLogs(opts, "ReceivedOnCall") @@ -2169,9 +2213,9 @@ func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) WatchReceivedOn }), nil } -// ParseReceivedOnCall is a log parse operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// ParseReceivedOnCall is a log parse operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_ZetaConnectorNativeTest *ZetaConnectorNativeTestFilterer) ParseReceivedOnCall(log types.Log) (*ZetaConnectorNativeTestReceivedOnCall, error) { event := new(ZetaConnectorNativeTestReceivedOnCall) if err := _ZetaConnectorNativeTest.contract.UnpackLog(event, "ReceivedOnCall", log); err != nil { diff --git a/v2/pkg/zetaconnectornativeupgradetest.sol/zetaconnectornativeupgradetest.go b/v2/pkg/zetaconnectornativeupgradetest.sol/zetaconnectornativeupgradetest.go index 79b31c6c..314803f3 100644 --- a/v2/pkg/zetaconnectornativeupgradetest.sol/zetaconnectornativeupgradetest.go +++ b/v2/pkg/zetaconnectornativeupgradetest.sol/zetaconnectornativeupgradetest.go @@ -29,6 +29,11 @@ var ( _ = abi.ConvertType ) +// MessageContext is an auto generated low-level Go binding around an user-defined struct. +type MessageContext struct { + Sender common.Address +} + // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Sender common.Address @@ -39,8 +44,8 @@ type RevertContext struct { // ZetaConnectorNativeUpgradeTestMetaData contains all meta data concerning the ZetaConnectorNativeUpgradeTest contract. var ZetaConnectorNativeUpgradeTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a060405230608052348015601357600080fd5b5060805161248461003d6000396000818161125d01528181611286015261145c01526124846000f3fe6080604052600436106101965760003560e01c80635e3e9fef116100e1578063950837aa1161008a578063ad3cb1cc11610064578063ad3cb1cc146104f2578063d547741f14610548578063e63ab1e914610568578063f8c8765e1461059c57600080fd5b8063950837aa14610489578063a217fddf146104a9578063a783c789146104be57600080fd5b80638456cb59116100bb5780638456cb59146103db57806385f438c1146103f057806391d148541461042457600080fd5b80635e3e9fef1461037b5780636f8728ad1461039b578063743e0c9b146103bb57600080fd5b806336568abe1161014357806352d1902d1161011d57806352d1902d1461030f5780635b112591146103245780635c975abb1461034457600080fd5b806336568abe146102c75780633f4ba83a146102e75780634f1ef286146102fc57600080fd5b806321e093b11161017457806321e093b11461022a578063248a9ca31461024a5780632f2ff15d146102a757600080fd5b806301ffc9a71461019b578063106e6290146101d0578063116191b6146101f2575b600080fd5b3480156101a757600080fd5b506101bb6101b6366004611dea565b6105bc565b60405190151581526020015b60405180910390f35b3480156101dc57600080fd5b506101f06101eb366004611e48565b610655565b005b3480156101fe57600080fd5b50600054610212906001600160a01b031681565b6040516001600160a01b0390911681526020016101c7565b34801561023657600080fd5b50600154610212906001600160a01b031681565b34801561025657600080fd5b50610299610265366004611e7b565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101c7565b3480156102b357600080fd5b506101f06102c2366004611e94565b610718565b3480156102d357600080fd5b506101f06102e2366004611e94565b610762565b3480156102f357600080fd5b506101f06107ae565b6101f061030a366004611eef565b6107e3565b34801561031b57600080fd5b50610299610802565b34801561033057600080fd5b50600254610212906001600160a01b031681565b34801561035057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101bb565b34801561038757600080fd5b506101f061039636600461203f565b610831565b3480156103a757600080fd5b506101f06103b63660046120a1565b610985565b3480156103c757600080fd5b506101f06103d6366004611e7b565b610ade565b3480156103e757600080fd5b506101f0610afe565b3480156103fc57600080fd5b506102997f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561043057600080fd5b506101bb61043f366004611e94565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561049557600080fd5b506101f06104a4366004612139565b610b30565b3480156104b557600080fd5b50610299600081565b3480156104ca57600080fd5b506102997f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156104fe57600080fd5b5061053b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101c79190612178565b34801561055457600080fd5b506101f0610563366004611e94565b610cc3565b34801561057457600080fd5b506102997f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105a857600080fd5b506101f06105b73660046121c9565b610d07565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061064f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61065d610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461068781610f0f565b61068f610f19565b6001546106a6906001600160a01b03168585610f77565b836001600160a01b03167f3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee9846040516106e191815260200190565b60405180910390a25061071360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461075281610f0f565b61075c8383611011565b50505050565b6001600160a01b03811633146107a4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61071382826110fe565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107d881610f0f565b6107e06111c2565b50565b6107eb611252565b6107f482611322565b6107fe828261132d565b5050565b600061080c611451565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610839610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461086381610f0f565b61086b610f19565b600054600154610888916001600160a01b03918216911687610f77565b6000546001546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692635131ab59926108dd929116908a908a908a908a90600401612266565b600060405180830381600087803b1580156108f757600080fd5b505af115801561090b573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d86868660405161094c939291906122a9565b60405180910390a25061097e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b61098d610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109b781610f0f565b6109bf610f19565b6000546001546109dc916001600160a01b03918216911688610f77565b6000546001546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263aa0c0fc192610a33929116908b908b908b908b908a90600401612374565b600060405180830381600087803b158015610a4d57600080fd5b505af1158015610a61573d6000803e3d6000fd5b50505050866001600160a01b03167f5272d2fee39bff41b2e763562526315906046373ce08a7bacf76c3080d731ff087878786604051610aa494939291906123cb565b60405180910390a250610ad660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b610ae6610f19565b6001546107e0906001600160a01b03163330846114b3565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b2881610f0f565b6107e06114ec565b6000610b3b81610f0f565b6001600160a01b038216610b7b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610bb2907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166110fe565b50600254610bea907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166110fe565b50610c157f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483611011565b50610c407f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83611011565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610cfd81610f0f565b61075c83836110fe565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d525750825b905060008267ffffffffffffffff166001148015610d6f5750303b155b905081158015610d7d575080155b15610db4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610e155784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610e2189898989611565565b8315610e835784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01610f09576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6107e08133611870565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610f75576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261071391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506118fd565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166110f4576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556110aa3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061064f565b600091505061064f565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156110f4576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061064f565b6111ca611979565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806112eb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112df7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610f75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107fe81610f0f565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113a5575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526113a2918101906123f7565b60015b6113eb576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611447576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016113e2565b61071383836119d4565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b03848116602483015283811660448301526064820183905261075c9186918216906323b872dd90608401610fa4565b6114f4610f19565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611234565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115b05750825b905060008267ffffffffffffffff1660011480156115cd5750303b155b9050811580156115db575080155b15611612576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116735784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061169057506001600160a01b038816155b806116a257506001600160a01b038716155b806116b457506001600160a01b038616155b156116eb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116f3611a2a565b6116fb611a32565b611703611a2a565b61170b611a42565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b16919092161790556117669087611011565b506117917f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e488611011565b506117bc7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb88611011565b506117e77f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611011565b506118127f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a88611011565b508315610e835784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610e7a565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166107fe576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016113e2565b60006119126001600160a01b03841683611a52565b905080516000141580156119375750808060200190518101906119359190612410565b155b15610713576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016113e2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610f75576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119dd82611a67565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611a22576107138282611b0f565b6107fe611b85565b610f75611bbd565b611a3a611bbd565b610f75611c24565b611a4a611bbd565b610f75611c2c565b6060611a6083836000611c7d565b9392505050565b806001600160a01b03163b600003611ab6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016113e2565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611b2c9190612432565b600060405180830381855af49150503d8060008114611b67576040519150601f19603f3d011682016040523d82523d6000602084013e611b6c565b606091505b5091509150611b7c858383611d33565b95945050505050565b3415610f75576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610f75576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610feb611bbd565b611c34611bbd565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606081471015611cbb576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016113e2565b600080856001600160a01b03168486604051611cd79190612432565b60006040518083038185875af1925050503d8060008114611d14576040519150601f19603f3d011682016040523d82523d6000602084013e611d19565b606091505b5091509150611d29868383611d33565b9695505050505050565b606082611d4857611d4382611da8565b611a60565b8151158015611d5f57506001600160a01b0384163b155b15611da1576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016113e2565b5080611a60565b805115611db85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611dfc57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611a6057600080fd5b80356001600160a01b0381168114611e4357600080fd5b919050565b600080600060608486031215611e5d57600080fd5b611e6684611e2c565b95602085013595506040909401359392505050565b600060208284031215611e8d57600080fd5b5035919050565b60008060408385031215611ea757600080fd5b82359150611eb760208401611e2c565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611f0257600080fd5b611f0b83611e2c565b9150602083013567ffffffffffffffff811115611f2757600080fd5b8301601f81018513611f3857600080fd5b803567ffffffffffffffff811115611f5257611f52611ec0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715611fbe57611fbe611ec0565b604052818152828201602001871015611fd657600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008083601f84011261200857600080fd5b50813567ffffffffffffffff81111561202057600080fd5b60208301915083602082850101111561203857600080fd5b9250929050565b60008060008060006080868803121561205757600080fd5b61206086611e2c565b945060208601359350604086013567ffffffffffffffff81111561208357600080fd5b61208f88828901611ff6565b96999598509660600135949350505050565b60008060008060008060a087890312156120ba57600080fd5b6120c387611e2c565b955060208701359450604087013567ffffffffffffffff8111156120e657600080fd5b6120f289828a01611ff6565b90955093505060608701359150608087013567ffffffffffffffff81111561211957600080fd5b87016080818a03121561212b57600080fd5b809150509295509295509295565b60006020828403121561214b57600080fd5b611a6082611e2c565b60005b8381101561216f578181015183820152602001612157565b50506000910152565b6020815260008251806020840152612197816040850160208701612154565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080600080608085870312156121df57600080fd5b6121e885611e2c565b93506121f660208601611e2c565b925061220460408601611e2c565b915061221260608601611e2c565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061229e60808301848661221d565b979650505050505050565b838152604060208201526000611b7c60408301848661221d565b6001600160a01b036122d482611e2c565b1682526001600160a01b036122eb60208301611e2c565b1660208301526040818101359083015260006060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261233357600080fd5b820160208101903567ffffffffffffffff81111561235057600080fd5b80360382131561235f57600080fd5b60806060860152611b7c60808601828461221d565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006123ac60a08301858761221d565b82810360808401526123be81856122c3565b9998505050505050505050565b8481526060602082015260006123e560608301858761221d565b828103604084015261229e81856122c3565b60006020828403121561240957600080fd5b5051919050565b60006020828403121561242257600080fd5b81518015158114611a6057600080fd5b60008251612444818460208701612154565b919091019291505056fea264697066735822122088a3c4caa6fac6e05897ea5aa5d2d7bfd7475716ebc3036a69e9eb83e9e72f2c64736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"messageContext\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a060405230608052348015601357600080fd5b5060805161248e61003d60003960008181611227015281816112500152611426015261248e6000f3fe6080604052600436106101965760003560e01c80636f8728ad116100e1578063950837aa1161008a578063ad3cb1cc11610064578063ad3cb1cc146104f2578063d547741f14610548578063e63ab1e914610568578063f8c8765e1461059c57600080fd5b8063950837aa14610489578063a217fddf146104a9578063a783c789146104be57600080fd5b80638456cb59116100bb5780638456cb59146103db57806385f438c1146103f057806391d148541461042457600080fd5b80636f8728ad1461037b5780636fb9a7af1461039b578063743e0c9b146103bb57600080fd5b806336568abe1161014357806352d1902d1161011d57806352d1902d1461030f5780635b112591146103245780635c975abb1461034457600080fd5b806336568abe146102c75780633f4ba83a146102e75780634f1ef286146102fc57600080fd5b806321e093b11161017457806321e093b11461022a578063248a9ca31461024a5780632f2ff15d146102a757600080fd5b806301ffc9a71461019b578063106e6290146101d0578063116191b6146101f2575b600080fd5b3480156101a757600080fd5b506101bb6101b6366004611db4565b6105bc565b60405190151581526020015b60405180910390f35b3480156101dc57600080fd5b506101f06101eb366004611e12565b610655565b005b3480156101fe57600080fd5b50600054610212906001600160a01b031681565b6040516001600160a01b0390911681526020016101c7565b34801561023657600080fd5b50600154610212906001600160a01b031681565b34801561025657600080fd5b50610299610265366004611e45565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101c7565b3480156102b357600080fd5b506101f06102c2366004611e5e565b610718565b3480156102d357600080fd5b506101f06102e2366004611e5e565b610762565b3480156102f357600080fd5b506101f06107ae565b6101f061030a366004611eb9565b6107e3565b34801561031b57600080fd5b50610299610802565b34801561033057600080fd5b50600254610212906001600160a01b031681565b34801561035057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101bb565b34801561038757600080fd5b506101f0610396366004612009565b610831565b3480156103a757600080fd5b506101f06103b63660046120a1565b61098a565b3480156103c757600080fd5b506101f06103d6366004611e45565b610aa8565b3480156103e757600080fd5b506101f0610ac8565b3480156103fc57600080fd5b506102997f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561043057600080fd5b506101bb61043f366004611e5e565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561049557600080fd5b506101f06104a4366004612120565b610afa565b3480156104b557600080fd5b50610299600081565b3480156104ca57600080fd5b506102997f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156104fe57600080fd5b5061053b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101c7919061215f565b34801561055457600080fd5b506101f0610563366004611e5e565b610c8d565b34801561057457600080fd5b506102997f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105a857600080fd5b506101f06105b73660046121b0565b610cd1565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061064f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61065d610e58565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461068781610ed9565b61068f610ee3565b6001546106a6906001600160a01b03168585610f41565b836001600160a01b03167f3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee9846040516106e191815260200190565b60405180910390a25061071360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461075281610ed9565b61075c8383610fdb565b50505050565b6001600160a01b03811633146107a4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61071382826110c8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107d881610ed9565b6107e061118c565b50565b6107eb61121c565b6107f4826112ec565b6107fe82826112f7565b5050565b600061080c61141b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610839610e58565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461086381610ed9565b61086b610ee3565b600054600154610888916001600160a01b03918216911688610f41565b6000546001546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263aa0c0fc1926108df929116908b908b908b908b908a906004016122fe565b600060405180830381600087803b1580156108f957600080fd5b505af115801561090d573d6000803e3d6000fd5b50505050866001600160a01b03167f5272d2fee39bff41b2e763562526315906046373ce08a7bacf76c3080d731ff0878787866040516109509493929190612355565b60405180910390a25061098260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b610992610e58565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109bc81610ed9565b6109c4610ee3565b6000546001546109e1916001600160a01b03918216911687610f41565b6000546001546040517f7bbe9afa0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692637bbe9afa92610a39928c92909116908b908b908b908b9060040161238c565b600060405180830381600087803b158015610a5357600080fd5b505af1158015610a67573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d868686604051610950939291906123e7565b610ab0610ee3565b6001546107e0906001600160a01b031633308461147d565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610af281610ed9565b6107e06114b6565b6000610b0581610ed9565b6001600160a01b038216610b45576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610b7c907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166110c8565b50600254610bb4907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166110c8565b50610bdf7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610fdb565b50610c0a7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610fdb565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610cc781610ed9565b61075c83836110c8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d1c5750825b905060008267ffffffffffffffff166001148015610d395750303b155b905081158015610d47575080155b15610d7e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610ddf5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610deb8989898961152f565b8315610e4d5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01610ed3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6107e0813361183a565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610f3f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261071391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506118c7565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166110be576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556110743390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061064f565b600091505061064f565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156110be576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061064f565b611194611943565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806112b557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112a97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610f3f576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107fe81610ed9565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561136f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261136c91810190612401565b60015b6113b5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611411576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016113ac565b610713838361199e565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f3f576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b03848116602483015283811660448301526064820183905261075c9186918216906323b872dd90608401610f6e565b6114be610ee3565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336111fe565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561157a5750825b905060008267ffffffffffffffff1660011480156115975750303b155b9050811580156115a5575080155b156115dc576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561163d5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061165a57506001600160a01b038816155b8061166c57506001600160a01b038716155b8061167e57506001600160a01b038616155b156116b5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116bd6119f4565b6116c56119fc565b6116cd6119f4565b6116d5611a0c565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b16919092161790556117309087610fdb565b5061175b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e488610fdb565b506117867f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb88610fdb565b506117b17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87610fdb565b506117dc7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a88610fdb565b508315610e4d5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610e44565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166107fe576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016113ac565b60006118dc6001600160a01b03841683611a1c565b905080516000141580156119015750808060200190518101906118ff919061241a565b155b15610713576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016113ac565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610f3f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119a782611a31565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156119ec576107138282611ad9565b6107fe611b4f565b610f3f611b87565b611a04611b87565b610f3f611bee565b611a14611b87565b610f3f611bf6565b6060611a2a83836000611c47565b9392505050565b806001600160a01b03163b600003611a80576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016113ac565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611af6919061243c565b600060405180830381855af49150503d8060008114611b31576040519150601f19603f3d011682016040523d82523d6000602084013e611b36565b606091505b5091509150611b46858383611cfd565b95945050505050565b3415610f3f576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610f3f576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fb5611b87565b611bfe611b87565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606081471015611c85576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016113ac565b600080856001600160a01b03168486604051611ca1919061243c565b60006040518083038185875af1925050503d8060008114611cde576040519150601f19603f3d011682016040523d82523d6000602084013e611ce3565b606091505b5091509150611cf3868383611cfd565b9695505050505050565b606082611d1257611d0d82611d72565b611a2a565b8151158015611d2957506001600160a01b0384163b155b15611d6b576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016113ac565b5080611a2a565b805115611d825780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611dc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611a2a57600080fd5b80356001600160a01b0381168114611e0d57600080fd5b919050565b600080600060608486031215611e2757600080fd5b611e3084611df6565b95602085013595506040909401359392505050565b600060208284031215611e5757600080fd5b5035919050565b60008060408385031215611e7157600080fd5b82359150611e8160208401611df6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611ecc57600080fd5b611ed583611df6565b9150602083013567ffffffffffffffff811115611ef157600080fd5b8301601f81018513611f0257600080fd5b803567ffffffffffffffff811115611f1c57611f1c611e8a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715611f8857611f88611e8a565b604052818152828201602001871015611fa057600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008083601f840112611fd257600080fd5b50813567ffffffffffffffff811115611fea57600080fd5b60208301915083602082850101111561200257600080fd5b9250929050565b60008060008060008060a0878903121561202257600080fd5b61202b87611df6565b955060208701359450604087013567ffffffffffffffff81111561204e57600080fd5b61205a89828a01611fc0565b90955093505060608701359150608087013567ffffffffffffffff81111561208157600080fd5b87016080818a03121561209357600080fd5b809150509295509295509295565b60008060008060008086880360a08112156120bb57600080fd5b60208112156120c957600080fd5b508695506120d960208801611df6565b945060408701359350606087013567ffffffffffffffff8111156120fc57600080fd5b61210889828a01611fc0565b979a9699509497949695608090950135949350505050565b60006020828403121561213257600080fd5b611a2a82611df6565b60005b8381101561215657818101518382015260200161213e565b50506000910152565b602081526000825180602084015261217e81604085016020870161213b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080600080608085870312156121c657600080fd5b6121cf85611df6565b93506121dd60208601611df6565b92506121eb60408601611df6565b91506121f960608601611df6565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b0361225e82611df6565b1682526001600160a01b0361227560208301611df6565b1660208301526040818101359083015260006060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126122bd57600080fd5b820160208101903567ffffffffffffffff8111156122da57600080fd5b8036038213156122e957600080fd5b60806060860152611b46608086018284612204565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061233660a083018587612204565b8281036080840152612348818561224d565b9998505050505050505050565b84815260606020820152600061236f606083018587612204565b8281036040840152612381818561224d565b979650505050505050565b6001600160a01b0361239d88611df6565b1681526001600160a01b03861660208201526001600160a01b038516604082015283606082015260a0608082015260006123db60a083018486612204565b98975050505050505050565b838152604060208201526000611b46604083018486612204565b60006020828403121561241357600080fd5b5051919050565b60006020828403121561242c57600080fd5b81518015158114611a2a57600080fd5b6000825161244e81846020870161213b565b919091019291505056fea2646970667358221220bcbb03f51aa2eaaa2c095aeb1e255f05ceb9dfc2e6212a91694846fedf0f865564736f6c634300081a0033", } // ZetaConnectorNativeUpgradeTestABI is the input ABI used to generate the binding from. @@ -823,25 +828,25 @@ func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactorS return _ZetaConnectorNativeUpgradeTest.Contract.Withdraw(&_ZetaConnectorNativeUpgradeTest.TransactOpts, to, amount, arg2) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x5e3e9fef. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x6fb9a7af. // -// Solidity: function withdrawAndCall(address to, uint256 amount, bytes data, bytes32 ) returns() -func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactor) WithdrawAndCall(opts *bind.TransactOpts, to common.Address, amount *big.Int, data []byte, arg3 [32]byte) (*types.Transaction, error) { - return _ZetaConnectorNativeUpgradeTest.contract.Transact(opts, "withdrawAndCall", to, amount, data, arg3) +// Solidity: function withdrawAndCall((address) messageContext, address to, uint256 amount, bytes data, bytes32 ) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactor) WithdrawAndCall(opts *bind.TransactOpts, messageContext MessageContext, to common.Address, amount *big.Int, data []byte, arg4 [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.contract.Transact(opts, "withdrawAndCall", messageContext, to, amount, data, arg4) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x5e3e9fef. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x6fb9a7af. // -// Solidity: function withdrawAndCall(address to, uint256 amount, bytes data, bytes32 ) returns() -func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) WithdrawAndCall(to common.Address, amount *big.Int, data []byte, arg3 [32]byte) (*types.Transaction, error) { - return _ZetaConnectorNativeUpgradeTest.Contract.WithdrawAndCall(&_ZetaConnectorNativeUpgradeTest.TransactOpts, to, amount, data, arg3) +// Solidity: function withdrawAndCall((address) messageContext, address to, uint256 amount, bytes data, bytes32 ) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestSession) WithdrawAndCall(messageContext MessageContext, to common.Address, amount *big.Int, data []byte, arg4 [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.WithdrawAndCall(&_ZetaConnectorNativeUpgradeTest.TransactOpts, messageContext, to, amount, data, arg4) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x5e3e9fef. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x6fb9a7af. // -// Solidity: function withdrawAndCall(address to, uint256 amount, bytes data, bytes32 ) returns() -func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactorSession) WithdrawAndCall(to common.Address, amount *big.Int, data []byte, arg3 [32]byte) (*types.Transaction, error) { - return _ZetaConnectorNativeUpgradeTest.Contract.WithdrawAndCall(&_ZetaConnectorNativeUpgradeTest.TransactOpts, to, amount, data, arg3) +// Solidity: function withdrawAndCall((address) messageContext, address to, uint256 amount, bytes data, bytes32 ) returns() +func (_ZetaConnectorNativeUpgradeTest *ZetaConnectorNativeUpgradeTestTransactorSession) WithdrawAndCall(messageContext MessageContext, to common.Address, amount *big.Int, data []byte, arg4 [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNativeUpgradeTest.Contract.WithdrawAndCall(&_ZetaConnectorNativeUpgradeTest.TransactOpts, messageContext, to, amount, data, arg4) } // WithdrawAndRevert is a paid mutator transaction binding the contract method 0x6f8728ad. diff --git a/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go b/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go index 80ded77a..e598c6d4 100644 --- a/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go +++ b/v2/pkg/zetaconnectornonnative.sol/zetaconnectornonnative.go @@ -29,6 +29,11 @@ var ( _ = abi.ConvertType ) +// MessageContext is an auto generated low-level Go binding around an user-defined struct. +type MessageContext struct { + Sender common.Address +} + // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Sender common.Address @@ -39,8 +44,8 @@ type RevertContext struct { // ZetaConnectorNonNativeMetaData contains all meta data concerning the ZetaConnectorNonNative contract. var ZetaConnectorNonNativeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"maxSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMaxSupply\",\"inputs\":[{\"name\":\"maxSupply_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxSupplyUpdated\",\"inputs\":[{\"name\":\"maxSupply\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a060405230608052348015601357600080fd5b5060805161251961003d6000396000818161145701528181611480015261165601526125196000f3fe6080604052600436106101ac5760003560e01c80636f8728ad116100ec578063a217fddf1161008a578063d547741f11610064578063d547741f1461057e578063d5abeb011461059e578063e63ab1e9146105b4578063f8c8765e146105e857600080fd5b8063a217fddf146104df578063a783c789146104f4578063ad3cb1cc1461052857600080fd5b80638456cb59116100c65780638456cb591461041157806385f438c11461042657806391d148541461045a578063950837aa146104bf57600080fd5b80636f8728ad146103b15780636f8b44b0146103d1578063743e0c9b146103f157600080fd5b806336568abe1161015957806352d1902d1161013357806352d1902d146103255780635b1125911461033a5780635c975abb1461035a5780635e3e9fef1461039157600080fd5b806336568abe146102dd5780633f4ba83a146102fd5780634f1ef2861461031257600080fd5b806321e093b11161018a57806321e093b114610240578063248a9ca3146102605780632f2ff15d146102bd57600080fd5b806301ffc9a7146101b1578063106e6290146101e6578063116191b614610208575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004611e67565b610608565b60405190151581526020015b60405180910390f35b3480156101f257600080fd5b50610206610201366004611ec5565b6106a1565b005b34801561021457600080fd5b50600054610228906001600160a01b031681565b6040516001600160a01b0390911681526020016101dd565b34801561024c57600080fd5b50600154610228906001600160a01b031681565b34801561026c57600080fd5b506102af61027b366004611ef8565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101dd565b3480156102c957600080fd5b506102066102d8366004611f11565b610758565b3480156102e957600080fd5b506102066102f8366004611f11565b6107a2565b34801561030957600080fd5b506102066107ee565b610206610320366004611f6c565b610823565b34801561033157600080fd5b506102af610842565b34801561034657600080fd5b50600254610228906001600160a01b031681565b34801561036657600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101d1565b34801561039d57600080fd5b506102066103ac3660046120bc565b610871565b3480156103bd57600080fd5b506102066103cc36600461211e565b6109bf565b3480156103dd57600080fd5b506102066103ec366004611ef8565b610b12565b3480156103fd57600080fd5b5061020661040c366004611ef8565b610b80565b34801561041d57600080fd5b50610206610c01565b34801561043257600080fd5b506102af7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561046657600080fd5b506101d1610475366004611f11565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104cb57600080fd5b506102066104da3660046121b6565b610c33565b3480156104eb57600080fd5b506102af600081565b34801561050057600080fd5b506102af7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561053457600080fd5b506105716040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101dd91906121f5565b34801561058a57600080fd5b50610206610599366004611f11565b610dc6565b3480156105aa57600080fd5b506102af60035481565b3480156105c057600080fd5b506102af7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105f457600080fd5b50610206610603366004612246565b610e0a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061069b57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6106a9610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106d381611036565b6106db611040565b6106e684848461109e565b836001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161072191815260200190565b60405180910390a25061075360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461079281611036565b61079c838361120b565b50505050565b6001600160a01b03811633146107e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61075382826112f8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61081881611036565b6108206113bc565b50565b61082b61144c565b6108348261151c565b61083e8282611527565b5050565b600061084c61164b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610879610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46108a381611036565b6108ab611040565b6000546108c2906001600160a01b0316868461109e565b6000546001546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692635131ab5992610917929116908a908a908a908a906004016122e3565b600060405180830381600087803b15801561093157600080fd5b505af1158015610945573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d86868660405161098693929190612326565b60405180910390a2506109b860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6109c7610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109f181611036565b6109f9611040565b600054610a10906001600160a01b0316878561109e565b6000546001546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263aa0c0fc192610a67929116908b908b908b908b908a906004016123f1565b600060405180830381600087803b158015610a8157600080fd5b505af1158015610a95573d6000803e3d6000fd5b50505050866001600160a01b03167f5272d2fee39bff41b2e763562526315906046373ce08a7bacf76c3080d731ff087878786604051610ad89493929190612448565b60405180910390a250610b0a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b3c81611036565b610b44611040565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610b88611040565b6001546040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018390526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610bed57600080fd5b505af11580156109b8573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c2b81611036565b6108206116ad565b6000610c3e81611036565b6001600160a01b038216610c7e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610cb5907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166112f8565b50600254610ced907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166112f8565b50610d187f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361120b565b50610d437f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361120b565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610e0081611036565b61079c83836112f8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e555750825b905060008267ffffffffffffffff166001148015610e725750303b155b905081158015610e80575080155b15610eb7576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610f185784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610f2489898989611726565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6003558315610faa5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611030576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6108208133611a31565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561109c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600354600160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111189190612474565b611122908461248d565b111561115a576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f1e458bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018590526044820184905290911690631e458bee90606401600060405180830381600087803b1580156111c857600080fd5b505af11580156111dc573d6000803e3d6000fd5b50505050505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166112ee576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112a43390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061069b565b600091505061069b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156112ee576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061069b565b6113c4611abe565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806114e557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114d97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561109c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061083e81611036565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561159f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261159c91810190612474565b60015b6115e5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611641576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016115dc565b6107538383611b19565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461109c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116b5611040565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361142e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117715750825b905060008267ffffffffffffffff16600114801561178e5750303b155b90508115801561179c575080155b156117d3576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118345784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061185157506001600160a01b038816155b8061186357506001600160a01b038716155b8061187557506001600160a01b038616155b156118ac576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118b4611b6f565b6118bc611b77565b6118c4611b6f565b6118cc611b87565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b1691909216179055611927908761120b565b506119527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48861120b565b5061197d7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8861120b565b506119a87f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8761120b565b506119d37f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8861120b565b508315610faa5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610fa1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff1661083e576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016115dc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661109c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b2282611b97565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611b67576107538282611c3f565b61083e611cb5565b61109c611ced565b611b7f611ced565b61109c611d54565b611b8f611ced565b61109c611d5c565b806001600160a01b03163b600003611be6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016115dc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611c5c91906124c7565b600060405180830381855af49150503d8060008114611c97576040519150601f19603f3d011682016040523d82523d6000602084013e611c9c565b606091505b5091509150611cac858383611dad565b95945050505050565b341561109c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661109c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111e5611ced565b611d64611ced565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606082611dc257611dbd82611e25565b611e1e565b8151158015611dd957506001600160a01b0384163b155b15611e1b576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016115dc565b50805b9392505050565b805115611e355780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611e7957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611e1e57600080fd5b80356001600160a01b0381168114611ec057600080fd5b919050565b600080600060608486031215611eda57600080fd5b611ee384611ea9565b95602085013595506040909401359392505050565b600060208284031215611f0a57600080fd5b5035919050565b60008060408385031215611f2457600080fd5b82359150611f3460208401611ea9565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611f7f57600080fd5b611f8883611ea9565b9150602083013567ffffffffffffffff811115611fa457600080fd5b8301601f81018513611fb557600080fd5b803567ffffffffffffffff811115611fcf57611fcf611f3d565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561203b5761203b611f3d565b60405281815282820160200187101561205357600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008083601f84011261208557600080fd5b50813567ffffffffffffffff81111561209d57600080fd5b6020830191508360208285010111156120b557600080fd5b9250929050565b6000806000806000608086880312156120d457600080fd5b6120dd86611ea9565b945060208601359350604086013567ffffffffffffffff81111561210057600080fd5b61210c88828901612073565b96999598509660600135949350505050565b60008060008060008060a0878903121561213757600080fd5b61214087611ea9565b955060208701359450604087013567ffffffffffffffff81111561216357600080fd5b61216f89828a01612073565b90955093505060608701359150608087013567ffffffffffffffff81111561219657600080fd5b87016080818a0312156121a857600080fd5b809150509295509295509295565b6000602082840312156121c857600080fd5b611e1e82611ea9565b60005b838110156121ec5781810151838201526020016121d4565b50506000910152565b60208152600082518060208401526122148160408501602087016121d1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561225c57600080fd5b61226585611ea9565b935061227360208601611ea9565b925061228160408601611ea9565b915061228f60608601611ea9565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061231b60808301848661229a565b979650505050505050565b838152604060208201526000611cac60408301848661229a565b6001600160a01b0361235182611ea9565b1682526001600160a01b0361236860208301611ea9565b1660208301526040818101359083015260006060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126123b057600080fd5b820160208101903567ffffffffffffffff8111156123cd57600080fd5b8036038213156123dc57600080fd5b60806060860152611cac60808601828461229a565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061242960a08301858761229a565b828103608084015261243b8185612340565b9998505050505050505050565b84815260606020820152600061246260608301858761229a565b828103604084015261231b8185612340565b60006020828403121561248657600080fd5b5051919050565b8082018082111561069b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082516124d98184602087016121d1565b919091019291505056fea2646970667358221220ecaeeab5029e9c664da04ee2fdaf2e0659e1740805c1791257cff702c4072f4664736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"maxSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMaxSupply\",\"inputs\":[{\"name\":\"maxSupply_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"messageContext\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxSupplyUpdated\",\"inputs\":[{\"name\":\"maxSupply\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a060405230608052348015601357600080fd5b5060805161252a61003d60003960008181611428015281816114510152611627015261252a6000f3fe6080604052600436106101ac5760003560e01c80636f8b44b0116100ec578063a217fddf1161008a578063d547741f11610064578063d547741f1461057e578063d5abeb011461059e578063e63ab1e9146105b4578063f8c8765e146105e857600080fd5b8063a217fddf146104df578063a783c789146104f4578063ad3cb1cc1461052857600080fd5b80638456cb59116100c65780638456cb591461041157806385f438c11461042657806391d148541461045a578063950837aa146104bf57600080fd5b80636f8b44b0146103b15780636fb9a7af146103d1578063743e0c9b146103f157600080fd5b806336568abe1161015957806352d1902d1161013357806352d1902d146103255780635b1125911461033a5780635c975abb1461035a5780636f8728ad1461039157600080fd5b806336568abe146102dd5780633f4ba83a146102fd5780634f1ef2861461031257600080fd5b806321e093b11161018a57806321e093b114610240578063248a9ca3146102605780632f2ff15d146102bd57600080fd5b806301ffc9a7146101b1578063106e6290146101e6578063116191b614610208575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004611e38565b610608565b60405190151581526020015b60405180910390f35b3480156101f257600080fd5b50610206610201366004611e96565b6106a1565b005b34801561021457600080fd5b50600054610228906001600160a01b031681565b6040516001600160a01b0390911681526020016101dd565b34801561024c57600080fd5b50600154610228906001600160a01b031681565b34801561026c57600080fd5b506102af61027b366004611ec9565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101dd565b3480156102c957600080fd5b506102066102d8366004611ee2565b610758565b3480156102e957600080fd5b506102066102f8366004611ee2565b6107a2565b34801561030957600080fd5b506102066107ee565b610206610320366004611f3d565b610823565b34801561033157600080fd5b506102af610842565b34801561034657600080fd5b50600254610228906001600160a01b031681565b34801561036657600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101d1565b34801561039d57600080fd5b506102066103ac36600461208d565b610871565b3480156103bd57600080fd5b506102066103cc366004611ec9565b6109c4565b3480156103dd57600080fd5b506102066103ec366004612125565b610a32565b3480156103fd57600080fd5b5061020661040c366004611ec9565b610b4a565b34801561041d57600080fd5b50610206610bd2565b34801561043257600080fd5b506102af7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561046657600080fd5b506101d1610475366004611ee2565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104cb57600080fd5b506102066104da3660046121a4565b610c04565b3480156104eb57600080fd5b506102af600081565b34801561050057600080fd5b506102af7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561053457600080fd5b506105716040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101dd91906121e3565b34801561058a57600080fd5b50610206610599366004611ee2565b610d97565b3480156105aa57600080fd5b506102af60035481565b3480156105c057600080fd5b506102af7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105f457600080fd5b50610206610603366004612234565b610ddb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061069b57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6106a9610f86565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106d381611007565b6106db611011565b6106e684848461106f565b836001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161072191815260200190565b60405180910390a25061075360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461079281611007565b61079c83836111dc565b50505050565b6001600160a01b03811633146107e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61075382826112c9565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61081881611007565b61082061138d565b50565b61082b61141d565b610834826114ed565b61083e82826114f8565b5050565b600061084c61161c565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610879610f86565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46108a381611007565b6108ab611011565b6000546108c2906001600160a01b0316878561106f565b6000546001546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263aa0c0fc192610919929116908b908b908b908b908a90600401612382565b600060405180830381600087803b15801561093357600080fd5b505af1158015610947573d6000803e3d6000fd5b50505050866001600160a01b03167f5272d2fee39bff41b2e763562526315906046373ce08a7bacf76c3080d731ff08787878660405161098a94939291906123d9565b60405180910390a2506109bc60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109ee81611007565b6109f6611011565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610a3a610f86565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a6481611007565b610a6c611011565b600054610a83906001600160a01b0316868461106f565b6000546001546040517f7bbe9afa0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692637bbe9afa92610adb928c92909116908b908b908b908b90600401612410565b600060405180830381600087803b158015610af557600080fd5b505af1158015610b09573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d86868660405161098a9392919061246b565b610b52611011565b6001546040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018390526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610bb757600080fd5b505af1158015610bcb573d6000803e3d6000fd5b5050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610bfc81611007565b61082061167e565b6000610c0f81611007565b6001600160a01b038216610c4f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610c86907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166112c9565b50600254610cbe907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166112c9565b50610ce97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836111dc565b50610d147f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb836111dc565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610dd181611007565b61079c83836112c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e265750825b905060008267ffffffffffffffff166001148015610e435750303b155b905081158015610e51575080155b15610e88576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610ee95784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610ef5898989896116f7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6003558315610f7b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611001576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6108208133611a02565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561106d576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600354600160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e99190612485565b6110f3908461249e565b111561112b576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f1e458bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018590526044820184905290911690631e458bee90606401600060405180830381600087803b15801561119957600080fd5b505af11580156111ad573d6000803e3d6000fd5b50505050505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166112bf576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112753390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061069b565b600091505061069b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156112bf576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061069b565b611395611a8f565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806114b657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114aa7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561106d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061083e81611007565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611570575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261156d91810190612485565b60015b6115b6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611612576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016115ad565b6107538383611aea565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461106d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611686611011565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336113ff565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117425750825b905060008267ffffffffffffffff16600114801561175f5750303b155b90508115801561176d575080155b156117a4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118055784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061182257506001600160a01b038816155b8061183457506001600160a01b038716155b8061184657506001600160a01b038616155b1561187d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611885611b40565b61188d611b48565b611895611b40565b61189d611b58565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b16919092161790556118f890876111dc565b506119237f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4886111dc565b5061194e7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb886111dc565b506119797f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876111dc565b506119a47f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a886111dc565b508315610f7b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610f72565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff1661083e576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016115ad565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661106d576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611af382611b68565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611b38576107538282611c10565b61083e611c86565b61106d611cbe565b611b50611cbe565b61106d611d25565b611b60611cbe565b61106d611d2d565b806001600160a01b03163b600003611bb7576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016115ad565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611c2d91906124d8565b600060405180830381855af49150503d8060008114611c68576040519150601f19603f3d011682016040523d82523d6000602084013e611c6d565b606091505b5091509150611c7d858383611d7e565b95945050505050565b341561106d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661106d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111b6611cbe565b611d35611cbe565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606082611d9357611d8e82611df6565b611def565b8151158015611daa57506001600160a01b0384163b155b15611dec576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016115ad565b50805b9392505050565b805115611e065780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611e4a57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611def57600080fd5b80356001600160a01b0381168114611e9157600080fd5b919050565b600080600060608486031215611eab57600080fd5b611eb484611e7a565b95602085013595506040909401359392505050565b600060208284031215611edb57600080fd5b5035919050565b60008060408385031215611ef557600080fd5b82359150611f0560208401611e7a565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611f5057600080fd5b611f5983611e7a565b9150602083013567ffffffffffffffff811115611f7557600080fd5b8301601f81018513611f8657600080fd5b803567ffffffffffffffff811115611fa057611fa0611f0e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561200c5761200c611f0e565b60405281815282820160200187101561202457600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008083601f84011261205657600080fd5b50813567ffffffffffffffff81111561206e57600080fd5b60208301915083602082850101111561208657600080fd5b9250929050565b60008060008060008060a087890312156120a657600080fd5b6120af87611e7a565b955060208701359450604087013567ffffffffffffffff8111156120d257600080fd5b6120de89828a01612044565b90955093505060608701359150608087013567ffffffffffffffff81111561210557600080fd5b87016080818a03121561211757600080fd5b809150509295509295509295565b60008060008060008086880360a081121561213f57600080fd5b602081121561214d57600080fd5b5086955061215d60208801611e7a565b945060408701359350606087013567ffffffffffffffff81111561218057600080fd5b61218c89828a01612044565b979a9699509497949695608090950135949350505050565b6000602082840312156121b657600080fd5b611def82611e7a565b60005b838110156121da5781810151838201526020016121c2565b50506000910152565b60208152600082518060208401526122028160408501602087016121bf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561224a57600080fd5b61225385611e7a565b935061226160208601611e7a565b925061226f60408601611e7a565b915061227d60608601611e7a565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b036122e282611e7a565b1682526001600160a01b036122f960208301611e7a565b1660208301526040818101359083015260006060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261234157600080fd5b820160208101903567ffffffffffffffff81111561235e57600080fd5b80360382131561236d57600080fd5b60806060860152611c7d608086018284612288565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006123ba60a083018587612288565b82810360808401526123cc81856122d1565b9998505050505050505050565b8481526060602082015260006123f3606083018587612288565b828103604084015261240581856122d1565b979650505050505050565b6001600160a01b0361242188611e7a565b1681526001600160a01b03861660208201526001600160a01b038516604082015283606082015260a06080820152600061245f60a083018486612288565b98975050505050505050565b838152604060208201526000611c7d604083018486612288565b60006020828403121561249757600080fd5b5051919050565b8082018082111561069b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082516124ea8184602087016121bf565b919091019291505056fea264697066735822122055804dbd7fbbb2969eaa200af8f276c6819d4e17a57c4393d150dfb57aac38c764736f6c634300081a0033", } // ZetaConnectorNonNativeABI is the input ABI used to generate the binding from. @@ -875,25 +880,25 @@ func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactorSession) Withdraw return _ZetaConnectorNonNative.Contract.Withdraw(&_ZetaConnectorNonNative.TransactOpts, to, amount, internalSendHash) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x5e3e9fef. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x6fb9a7af. // -// Solidity: function withdrawAndCall(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() -func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactor) WithdrawAndCall(opts *bind.TransactOpts, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { - return _ZetaConnectorNonNative.contract.Transact(opts, "withdrawAndCall", to, amount, data, internalSendHash) +// Solidity: function withdrawAndCall((address) messageContext, address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactor) WithdrawAndCall(opts *bind.TransactOpts, messageContext MessageContext, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNonNative.contract.Transact(opts, "withdrawAndCall", messageContext, to, amount, data, internalSendHash) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x5e3e9fef. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x6fb9a7af. // -// Solidity: function withdrawAndCall(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() -func (_ZetaConnectorNonNative *ZetaConnectorNonNativeSession) WithdrawAndCall(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { - return _ZetaConnectorNonNative.Contract.WithdrawAndCall(&_ZetaConnectorNonNative.TransactOpts, to, amount, data, internalSendHash) +// Solidity: function withdrawAndCall((address) messageContext, address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeSession) WithdrawAndCall(messageContext MessageContext, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNonNative.Contract.WithdrawAndCall(&_ZetaConnectorNonNative.TransactOpts, messageContext, to, amount, data, internalSendHash) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x5e3e9fef. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x6fb9a7af. // -// Solidity: function withdrawAndCall(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() -func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactorSession) WithdrawAndCall(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { - return _ZetaConnectorNonNative.Contract.WithdrawAndCall(&_ZetaConnectorNonNative.TransactOpts, to, amount, data, internalSendHash) +// Solidity: function withdrawAndCall((address) messageContext, address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorNonNative *ZetaConnectorNonNativeTransactorSession) WithdrawAndCall(messageContext MessageContext, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNonNative.Contract.WithdrawAndCall(&_ZetaConnectorNonNative.TransactOpts, messageContext, to, amount, data, internalSendHash) } // WithdrawAndRevert is a paid mutator transaction binding the contract method 0x6f8728ad. diff --git a/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go b/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go index 46cd772a..20e9129e 100644 --- a/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go +++ b/v2/pkg/zetaconnectornonnative.t.sol/zetaconnectornonnativetest.go @@ -66,8 +66,8 @@ type StdInvariantFuzzSelector struct { // ZetaConnectorNonNativeTestMetaData contains all meta data concerning the ZetaConnectorNonNativeTest contract. var ZetaConnectorNonNativeTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testSexMaxSupplyFailsIfSenderIsNotTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpgradeAndWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedOnCall\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x6080604052600c8054600160ff199182168117909255601f80549091169091179055348015602c57600080fd5b5061d6318061003c6000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c8063aaf7419211610104578063d509b16c116100a2578063e63ab1e911610071578063e63ab1e914610357578063fa7626d41461037e578063fdca90521461038b578063fe574f841461039357600080fd5b8063d509b16c14610337578063dcf7d0371461033f578063de1cb76c14610347578063e20c9f711461034f57600080fd5b8063b5508aa9116100de578063b5508aa914610307578063ba414fa61461030f578063c190997214610327578063ccb0e3f21461032f57600080fd5b8063aaf74192146102ef578063af298bb1146102f7578063b0464fdc146102ff57600080fd5b8063493465581161017c57806385226c811161014b57806385226c811461026957806385f438c11461027e578063916a17c6146102b3578063a783c789146102c857600080fd5b8063493465581461023c57806366d9a9a0146102445780637db20efb14610259578063828320141461026157600080fd5b80632ade3880116101b85780632ade38801461020f5780633cba0107146102245780633e5e3c231461022c5780633f7286f41461023457600080fd5b80630a9254e4146101df5780631ed7831c146101e95780632506ef0314610207575b600080fd5b6101e761039b565b005b6101f1610b7e565b6040516101fe9190619a93565b60405180910390f35b6101e7610be0565b610217610e94565b6040516101fe9190619b2f565b6101e7610fd6565b6101f16117ad565b6101f161180d565b6101e761186d565b61024c611e4d565b6040516101fe9190619c95565b6101e7611fcf565b6101e761226e565b6102716124ce565b6040516101fe9190619d33565b6102a57f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b6040519081526020016101fe565b6102bb61259e565b6040516101fe9190619daa565b6102a57f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101e7612699565b6101e7612914565b6102bb612d5e565b610271612e59565b610317612f29565b60405190151581526020016101fe565b6101e7612ffd565b6101e761326d565b6101e7613d9a565b6101e76140ed565b6101e7614729565b6101f1614e56565b6102a57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f546103179060ff1681565b6101e7614eb6565b6101e76150b7565b602480547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163017909155602580548216611234179055602680548216615678908117909155602780549092166198761790915560405181906103ff906199c0565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610432573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c000000000000000000000000000000000000602082015260265460248054935191861690820152604481019390935292166064820152600091610524916084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526152a7565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0384811682029290921792839055604080518082018252601081527f4552433230437573746f64792e736f6c00000000000000000000000000000000602082015260265460248054935194909604851695840195909552938316604483015290911660648201529192506105ca916084016104c7565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691909117909155604080518082018252601a81527f5a657461436f6e6e6563746f724e6f6e4e61746976652e736f6c0000000000006020820152601f546023546026546024805495516101009094048716908401529085166044830152841660648201529190921660848201529192506106cf9160a40160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff8c8765e000000000000000000000000000000000000000000000000000000001790526152a7565b602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038381169190911790915560265460405163ca669fa760e01b815291166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561075a57600080fd5b505af115801561076e573d6000803e3d6000fd5b50506023546026546022546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152911692506315d57fd49150604401600060405180830381600087803b1580156107df57600080fd5b505af11580156107f3573d6000803e3d6000fd5b50505050604051610803906199cd565b604051809103906000f08015801561081f573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556026546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156108cb57600080fd5b505af11580156108df573d6000803e3d6000fd5b5050602480546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d93506306447d56925001600060405180830381600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b5050601f546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f9150602401600060405180830381600087803b1580156109d357600080fd5b505af11580156109e7573d6000803e3d6000fd5b5050601f546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef9150602401600060405180830381600087803b158015610a5257600080fd5b505af1158015610a66573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ac857600080fd5b505af1158015610adc573d6000803e3d6000fd5b5050604080516080810182526024546001600160a01b039081168252602354811660208084019182526001848601908152855191820190955260008152606084018190528351602880549185167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178155925160298054919095169116179092559251602a55909350909150602b90610b789082619f09565b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610bd657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bb8575b5050505050905090565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610c7b57600080fd5b505af1158015610c8f573d6000803e3d6000fd5b50506022546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015610cf257600080fd5b505af1158015610d06573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015610d6357600080fd5b505af1158015610d77573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015610e0057600080fd5b505af1158015610e14573d6000803e3d6000fd5b50506022546020546001600160a01b039182169350636f8728ad925016610e3c856001619ff7565b8460286040518563ffffffff1660e01b8152600401610e5e949392919061a0e7565b600060405180830381600087803b158015610e7857600080fd5b505af1158015610e8c573d6000803e3d6000fd5b505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610fcd57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610fb6578382906000526020600020018054610f2990619e70565b80601f0160208091040260200160405190810160405280929190818152602001828054610f5590619e70565b8015610fa25780601f10610f7757610100808354040283529160200191610fa2565b820191906000526020600020905b815481529060010190602001808311610f8557829003601f168201915b505050505081526020019060010190610f0a565b505050508152505081526020019060010190610eb8565b50505050905090565b602354602554604051620186a0602482018190526001600160a01b039384166044830152929091166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260235460255491516370a0823160e01b81526001600160a01b0392831660048201529293506000929116906370a0823190602401602060405180830381865afa1580156110b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d8919061a128565b90506110e58160006152c6565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115a919061a128565b90506111678160006152c6565b601f546040516101009091046001600160a01b03166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611252916001600160a01b039190911690600090869060040161a141565b600060405180830381600087803b15801561126c57600080fd5b505af1158015611280573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561131257600080fd5b505af1158015611326573d6000803e3d6000fd5b5050601f54602354602554604080516101009094046001600160a01b039081168552602085018d9052928316908401521660608201527f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609250608001905060405180910390a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561141a57600080fd5b505af115801561142e573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d9150611473908990889061a169565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114d457600080fd5b505af11580156114e8573d6000803e3d6000fd5b50506022546020546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061154092909116908a9089908b9060040161a182565b600060405180830381600087803b15801561155a57600080fd5b505af115801561156e573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156115c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e5919061a128565b90506115f181886152c6565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611642573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611666919061a128565b90506116738160006152c6565b602354601f546020546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b0390811660048401529081166024830152600092169063dd62ed3e90604401602060405180830381865afa1580156116eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170f919061a128565b905061171c8160006152c6565b602354601f546040516370a0823160e01b81526101009091046001600160a01b03908116600483015260009216906370a0823190602401602060405180830381865afa158015611770573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611794919061a128565b90506117a18160006152c6565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610bd6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610bb8575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610bd6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610bb8575050505050905090565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905260235460255493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a082319361190f93921691016001600160a01b0391909116815260200190565b602060405180830381865afa15801561192c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611950919061a128565b905061195d8160006152c6565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156119ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d2919061a128565b90506119df8160006152c6565b601f546040516101009091046001600160a01b03166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611aca916001600160a01b039190911690600090869060040161a141565b600060405180830381600087803b158015611ae457600080fd5b505af1158015611af8573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611b8a57600080fd5b505af1158015611b9e573d6000803e3d6000fd5b5050601f546040516101009091046001600160a01b031681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09250602001905060405180910390a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611c7557600080fd5b505af1158015611c89573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d9150611cce908990889061a169565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611d2f57600080fd5b505af1158015611d43573d6000803e3d6000fd5b50506022546020546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350611d9b92909116908a9089908b9060040161a182565b600060405180830381600087803b158015611db557600080fd5b505af1158015611dc9573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e40919061a128565b90506115f18160006152c6565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610fcd5783829060005260206000209060020201604051806040016040529081600082018054611ea490619e70565b80601f0160208091040260200160405190810160405280929190818152602001828054611ed090619e70565b8015611f1d5780601f10611ef257610100808354040283529160200191611f1d565b820191906000526020600020905b815481529060010190602001808311611f0057829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611fb757602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f645790505b50505050508152505081526020019060010190611e71565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561202d57600080fd5b505af1158015612041573d6000803e3d6000fd5b50506022546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b1580156120a457600080fd5b505af11580156120b8573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561211557600080fd5b505af1158015612129573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156121b257600080fd5b505af11580156121c6573d6000803e3d6000fd5b50506022546020546001600160a01b03918216935063106e62909250166121ee846001619ff7565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039092166004830152602482015260006044820152606401600060405180830381600087803b15801561225357600080fd5b505af1158015612267573d6000803e3d6000fd5b5050505050565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f19018152908290526024805463ca669fa760e01b84526001600160a01b03166004840152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b15801561230b57600080fd5b505af115801561231f573d6000803e3d6000fd5b505060248054604080516001600160a01b03909216928201929092527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061240e919060040161a1bb565b600060405180830381600087803b15801561242857600080fd5b505af115801561243c573d6000803e3d6000fd5b50506022546020546040517f6f8728ad0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450636f8728ad9350612497929091169087908690889060289060040161a1ce565b600060405180830381600087803b1580156124b157600080fd5b505af11580156124c5573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610fcd57838290600052602060002001805461251190619e70565b80601f016020809104026020016040519081016040528092919081815260200182805461253d90619e70565b801561258a5780601f1061255f5761010080835404028352916020019161258a565b820191906000526020600020905b81548152906001019060200180831161256d57829003601f168201915b5050505050815260200190600101906124f2565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610fcd5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561268157602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161262e5790505b505050505081525050815260200190600101906125c2565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561273457600080fd5b505af1158015612748573d6000803e3d6000fd5b50506022546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b1580156127ab57600080fd5b505af11580156127bf573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561281c57600080fd5b505af1158015612830573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156128b957600080fd5b505af11580156128cd573d6000803e3d6000fd5b50506022546020546001600160a01b039182169350635e3e9fef9250166128f5856001619ff7565b846040518463ffffffff1660e01b8152600401610e5e9392919061a21a565b6022546040805160608101909152602580825261295e926001600160a01b0316919061d5d760208301396040805160208101909152600081526024546001600160a01b0316615345565b6022546023546025546040516370a0823160e01b81526001600160a01b03918216600482015292811692620186a09260009216906370a0823190602401602060405180830381865afa1580156129b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129dc919061a128565b90506129e98160006152c6565b6025546040516001600160a01b0390911660248201526044810183905260006064820181905290819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612ad2916001600160a01b039190911690600090869060040161a141565b600060405180830381600087803b158015612aec57600080fd5b505af1158015612b00573d6000803e3d6000fd5b50506040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b0388166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612b8e57600080fd5b505af1158015612ba2573d6000803e3d6000fd5b50506025546040518781526001600160a01b0390911692507f3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee9915060200160405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612c4157600080fd5b505af1158015612c55573d6000803e3d6000fd5b50506025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810188905260448101869052908816925063106e62909150606401600060405180830381600087803b158015612cc757600080fd5b505af1158015612cdb573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d52919061a128565b9050610e8c81866152c6565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610fcd5760008481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015612e4157602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612dee5790505b50505050508152505081526020019060010190612d82565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610fcd578382906000526020600020018054612e9c90619e70565b80601f0160208091040260200160405190810160405280929190818152602001828054612ec890619e70565b8015612f155780601f10612eea57610100808354040283529160200191612f15565b820191906000526020600020905b815481529060010190602001808311612ef857829003601f168201915b505050505081526020019060010190612e7d565b60085460009060ff1615612f41575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa158015612fd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ff6919061a128565b1415905090565b602354602554604051620186a0602482018190526001600160a01b039384166044830152929091166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260248054915163ca669fa760e01b81526001600160a01b039092166004830152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b1580156130e457600080fd5b505af11580156130f8573d6000803e3d6000fd5b505060248054604080516001600160a01b03909216928201929092527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506131e7919060040161a1bb565b600060405180830381600087803b15801561320157600080fd5b505af1158015613215573d6000803e3d6000fd5b50506022546020546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef9350612497929091169087908690889060040161a182565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156132ce57600080fd5b505af11580156132e2573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506133cd919060040161a1bb565b600060405180830381600087803b1580156133e757600080fd5b505af11580156133fb573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561344f57600080fd5b505af1158015613463573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156134c057600080fd5b505af11580156134d4573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506135bf919060040161a1bb565b600060405180830381600087803b1580156135d957600080fd5b505af11580156135ed573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561364157600080fd5b505af1158015613655573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156136b257600080fd5b505af11580156136c6573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561371a57600080fd5b505af115801561372e573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b1580156137b757600080fd5b505af11580156137cb573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561382857600080fd5b505af115801561383c573d6000803e3d6000fd5b50506022546025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b1580156138b057600080fd5b505af11580156138c4573d6000803e3d6000fd5b50506024805460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063ca669fa7925001600060405180830381600087803b15801561392057600080fd5b505af1158015613934573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561398857600080fd5b505af115801561399c573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156139ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a13919061a128565b9050613a208160006152c6565b6025546040516001600160a01b039091166024820152604481018490526064810183905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613b07916001600160a01b039190911690600090869060040161a141565b600060405180830381600087803b158015613b2157600080fd5b505af1158015613b35573d6000803e3d6000fd5b50506022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613bc757600080fd5b505af1158015613bdb573d6000803e3d6000fd5b50506025546040518781526001600160a01b0390911692507f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5915060200160405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015613c7a57600080fd5b505af1158015613c8e573d6000803e3d6000fd5b50506022546025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e629091506064015b600060405180830381600087803b158015613d0357600080fd5b505af1158015613d17573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015613d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d8e919061a128565b905061226781866152c6565b6023546025546040516370a0823160e01b81526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa158015613ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e11919061a128565b9050613e1e8160006152c6565b6025546040516001600160a01b0390911660248201526044810183905260006064820181905290819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391613f07916001600160a01b039190911690600090869060040161a141565b600060405180830381600087803b158015613f2157600080fd5b505af1158015613f35573d6000803e3d6000fd5b50506022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015613fc757600080fd5b505af1158015613fdb573d6000803e3d6000fd5b50506025546040518781526001600160a01b0390911692507f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5915060200160405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561407a57600080fd5b505af115801561408e573d6000803e3d6000fd5b50506022546025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018790529116925063106e62909150606401613ce9565b602354602554604051620186a0602482018190526001600160a01b039384166044830152929091166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc51316910000000000000000000000000000000000000000000000000000000017905260235460255491516370a0823160e01b81526001600160a01b0392831660048201529293506000929116906370a0823190602401602060405180830381865afa1580156141cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ef919061a128565b90506141fc8160006152c6565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561424d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614271919061a128565b905061427e8160006152c6565b601f546040516101009091046001600160a01b03166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614369916001600160a01b039190911690600090869060040161a141565b600060405180830381600087803b15801561438357600080fd5b505af1158015614397573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561442957600080fd5b505af115801561443d573d6000803e3d6000fd5b5050601f547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af60925061010090046001600160a01b0316905061448060028961a253565b602354602554604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561454857600080fd5b505af115801561455c573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d91506145a1908990889061a169565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561460257600080fd5b505af1158015614616573d6000803e3d6000fd5b50506022546020546040517f5e3e9fef0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450635e3e9fef935061466e92909116908a9089908b9060040161a182565b600060405180830381600087803b15801561468857600080fd5b505af115801561469c573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156146ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614713919061a128565b90506115f18161472460028a61a253565b6152c6565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f19018152908290526023546020546370a0823160e01b84526001600160a01b0390811660048501529193506000929116906370a0823190602401602060405180830381865afa1580156147bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147e3919061a128565b90506147f08160006152c6565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614841573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614865919061a128565b601f54604080516001600160a01b036101009093048316602482015260448101899052606480820189905282518083039091018152608490910182526020810180517f1e458bee000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba39261494792911690600090869060040161a141565b600060405180830381600087803b15801561496157600080fd5b505af1158015614975573d6000803e3d6000fd5b50506020546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614a0757600080fd5b505af1158015614a1b573d6000803e3d6000fd5b505050507f689a5a5cb55e795ffe4cd8b419cd3bb0a3373974c54d25f64e734d7388b93e9b601f60019054906101000a90046001600160a01b03166028604051614a6692919061a28e565b60405180910390a1601f546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614b0057600080fd5b505af1158015614b14573d6000803e3d6000fd5b50506023546020546040516001600160a01b039283169450911691507fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e03590614b62908a90899060289061a2b0565b60405180910390a36022546040517f81bad6f3000000000000000000000000000000000000000000000000000000008152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614bf857600080fd5b505af1158015614c0c573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f5272d2fee39bff41b2e763562526315906046373ce08a7bacf76c3080d731ff09150614c54908990889060289061a2b0565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614cb557600080fd5b505af1158015614cc9573d6000803e3d6000fd5b50506022546020546040517f6f8728ad0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450636f8728ad9350614d2492909116908a9089908b9060289060040161a1ce565b600060405180830381600087803b158015614d3e57600080fd5b505af1158015614d52573d6000803e3d6000fd5b50506023546020546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dc9919061a128565b9050614dd581886152c6565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614e26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e4a919061a128565b905061167381856152c6565b60606015805480602002602001604051908101604052809291908181526020018280548015610bd6576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610bb8575050505050905090565b6024805460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b158015614f0e57600080fd5b505af1158015614f22573d6000803e3d6000fd5b505060248054604080516001600160a01b03909216928201929092527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250615011919060040161a1bb565b600060405180830381600087803b15801561502b57600080fd5b505af115801561503f573d6000803e3d6000fd5b50506022546040517f6f8b44b000000000000000000000000000000000000000000000000000000000815261271060048201526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b1580156150a357600080fd5b505af1158015610b78573d6000803e3d6000fd5b6024805460405163ca669fa760e01b81526001600160a01b039091166004820152620186a091600091737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b15801561511757600080fd5b505af115801561512b573d6000803e3d6000fd5b505060248054604080516001600160a01b03909216928201929092527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061521a919060040161a1bb565b600060405180830381600087803b15801561523457600080fd5b505af1158015615248573d6000803e3d6000fd5b50506022546025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401610e5e565b60006152b16199da565b6152bc84848361535a565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561533157600080fd5b505afa158015610e8c573d6000803e3d6000fd5b61534d6199da565b61226785858584866153d5565b60008061536785846154d5565b90506153ca6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016153b592919061a2db565b604051602081830303815290604052856154e1565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b15801561544757600080fd5b505af1925050508015615458575060015b61546d576154688787878761550f565b6124c5565b6154798787878761550f565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156154b457600080fd5b505af11580156154c8573d6000803e3d6000fd5b5050505050505050505050565b60006153ce8383615528565b60c08101515160009015615505576154fe84848460c00151615543565b90506153ce565b6154fe84846156e9565b600061551b84836157d4565b90506122678582856157e0565b60006155348383615baa565b6153ce838360200151846154e1565b60008061554e615bba565b9050600061555c8683615c8d565b905060006155738260600151836020015185616133565b9050600061558383838989616345565b90506000615590826171c2565b602081015181519192509060030b15615603578982604001516040516020016155ba92919061a2fd565b60408051601f19818403018152908290527f08c379a00000000000000000000000000000000000000000000000000000000082526155fa9160040161a1bb565b60405180910390fd5b60006156466040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a200000000000000000000000815250836001617391565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d9061569990849060040161a1bb565b602060405180830381865afa1580156156b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906156da919061a37e565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc9259061573e90879060040161a1bb565b600060405180830381865afa15801561575b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615783919081019061a460565b905060006157b1828560405160200161579d92919061a495565b604051602081830303815290604052617591565b90506001600160a01b0381166152bc5784846040516020016155ba92919061a4c4565b600061553483836175a4565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa15801561587c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906158a0919061a128565b905080615a475760006158b2866175b0565b604080518082018252600581527f352e302e300000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061593d905b604080518082018252600080825260209182015281518083019092528451825280850190820152906176a8565b80615949575060008451115b156159cc576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef28690615995908890889060040161a2db565b600060405180830381600087803b1580156159af57600080fd5b505af11580156159c3573d6000803e3d6000fd5b50505050615a41565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b158015615a2857600080fd5b505af1158015615a3c573d6000803e3d6000fd5b505050505b50612267565b806000615a53826175b0565b604080518082018252600581527f352e302e3000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615ab590615910565b80615ac1575060008551115b15615b46576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90615b0f908a908a908a9060040161a56f565b600060405180830381600087803b158015615b2957600080fd5b505af1158015615b3d573d6000803e3d6000fd5b505050506124c5565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b1580156154b457600080fd5b615bb6828260006176bc565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c90615c4190849060040161a5a0565b600060405180830381865afa158015615c5e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615c86919081019061a5e7565b9250505090565b615cbf6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d9050615d0a6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b615d13856177bf565b60208201526000615d2386617ba4565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa158015615d65573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615d8d919081019061a5e7565b86838560200151604051602001615da7949392919061a630565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb1190615dff90859060040161a1bb565b600060405180830381865afa158015615e1c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615e44919081019061a5e7565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f690615e8c90849060040161a734565b602060405180830381865afa158015615ea9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615ecd919061a786565b615ee257816040516020016155ba919061a7a8565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac890615f2790849060040161a83a565b600060405180830381865afa158015615f44573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615f6c919081019061a5e7565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f690615fb390849060040161a88c565b602060405180830381865afa158015615fd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615ff4919061a786565b15616089576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061603e90849060040161a88c565b600060405180830381865afa15801561605b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616083919081019061a5e7565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016160ae919061a8de565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016160da92919061a94a565b600060405180830381865afa1580156160f7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261611f919081019061a5e7565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b606081526020019060019003908161614f5790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106161af576161af61a96f565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106162035761620361a96f565b60200260200101819052508460405160200161621f919061a99e565b604051602081830303815290604052816002815181106162415761624161a96f565b60200260200101819052508260405160200161625d919061aa0a565b6040516020818303038152906040528160038151811061627f5761627f61a96f565b60200260200101819052506000616295826171c2565b602080820151604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000081850190815282518084018452600080825290860152825180840190935290518252928101929092529192506163269060408051808201825260008082526020918201528151808301909252845182528085019082015290617e27565b61633b57856040516020016155ba919061aa4b565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d9015616395565b511590565b61650957826020015115616451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a4016155fa565b8260c0015115616509576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a4016155fa565b6040805160ff8082526120008201909252600091816020015b606081526020019060019003908161652257905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061657d9061aadc565b935060ff16815181106165925761659261a96f565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e37000000000000000000000000000000000000008152506040516020016165e3919061aafb565b6040516020818303038152906040528282806165fe9061aadc565b935060ff16815181106166135761661361a96f565b60200260200101819052506040518060400160405280600681526020017f6465706c6f7900000000000000000000000000000000000000000000000000008152508282806166609061aadc565b935060ff16815181106166755761667561a96f565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d650000000000000000000000000000000000008152508282806166c29061aadc565b935060ff16815181106166d7576166d761a96f565b602002602001018190525087602001518282806166f39061aadc565b935060ff16815181106167085761670861a96f565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e7472616374506174680000000000000000000000000000000000008152508282806167559061aadc565b935060ff168151811061676a5761676a61a96f565b6020908102919091010152875182826167828161aadc565b935060ff16815181106167975761679761a96f565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e496400000000000000000000000000000000000000000000008152508282806167e49061aadc565b935060ff16815181106167f9576167f961a96f565b602002602001018190525061680d46617e88565b82826168188161aadc565b935060ff168151811061682d5761682d61a96f565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c65000000000000000000000000000000000081525082828061687a9061aadc565b935060ff168151811061688f5761688f61a96f565b6020026020010181905250868282806168a79061aadc565b935060ff16815181106168bc576168bc61a96f565b60209081029190910101528551156169e35760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f646500000000000000000000006020820152828261690d8161aadc565b935060ff16815181106169225761692261a96f565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d9061697290899060040161a1bb565b600060405180830381865afa15801561698f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526169b7919081019061a5e7565b82826169c28161aadc565b935060ff16815181106169d7576169d761a96f565b60200260200101819052505b846020015115616ab35760408051808201909152601281527f2d2d766572696679536f75726365436f6465000000000000000000000000000060208201528282616a2c8161aadc565b935060ff1681518110616a4157616a4161a96f565b60200260200101819052506040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250828280616a8e9061aadc565b935060ff1681518110616aa357616aa361a96f565b6020026020010181905250616c7a565b616aeb6163908660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b616b7e5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282616b2e8161aadc565b935060ff1681518110616b4357616b4361a96f565b60200260200101819052508460a00151604051602001616b63919061a99e565b604051602081830303815290604052828280616a8e9061aadc565b8460c00151158015616bc1575060408089015181518083018352600080825260209182015282518084019093528151835290810190820152616bbf90511590565b155b15616c7a5760408051808201909152600d81527f2d2d6c6963656e7365547970650000000000000000000000000000000000000060208201528282616c058161aadc565b935060ff1681518110616c1a57616c1a61a96f565b6020026020010181905250616c2e88617f28565b604051602001616c3e919061a99e565b604051602081830303815290604052828280616c599061aadc565b935060ff1681518110616c6e57616c6e61a96f565b60200260200101819052505b60408086015181518083018352600080825260209182015282518084019093528151835290810190820152616cae90511590565b616d435760408051808201909152600b81527f2d2d72656c61796572496400000000000000000000000000000000000000000060208201528282616cf18161aadc565b935060ff1681518110616d0657616d0661a96f565b60200260200101819052508460400151828280616d229061aadc565b935060ff1681518110616d3757616d3761a96f565b60200260200101819052505b606085015115616e645760408051808201909152600681527f2d2d73616c74000000000000000000000000000000000000000000000000000060208201528282616d8c8161aadc565b935060ff1681518110616da157616da161a96f565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015616e10573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616e38919081019061a5e7565b8282616e438161aadc565b935060ff1681518110616e5857616e5861a96f565b60200260200101819052505b60e08501515115616f0b5760408051808201909152600a81527f2d2d6761734c696d69740000000000000000000000000000000000000000000060208201528282616eae8161aadc565b935060ff1681518110616ec357616ec361a96f565b6020026020010181905250616edf8560e0015160000151617e88565b8282616eea8161aadc565b935060ff1681518110616eff57616eff61a96f565b60200260200101819052505b60e08501516020015115616fb55760408051808201909152600a81527f2d2d67617350726963650000000000000000000000000000000000000000000060208201528282616f588161aadc565b935060ff1681518110616f6d57616f6d61a96f565b6020026020010181905250616f898560e0015160200151617e88565b8282616f948161aadc565b935060ff1681518110616fa957616fa961a96f565b60200260200101819052505b60e0850151604001511561705f5760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826170028161aadc565b935060ff16815181106170175761701761a96f565b60200260200101819052506170338560e0015160400151617e88565b828261703e8161aadc565b935060ff16815181106170535761705361a96f565b60200260200101819052505b60e085015160600151156171095760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826170ac8161aadc565b935060ff16815181106170c1576170c161a96f565b60200260200101819052506170dd8560e0015160600151617e88565b82826170e88161aadc565b935060ff16815181106170fd576170fd61a96f565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561712757617127619e41565b60405190808252806020026020018201604052801561715a57816020015b60608152602001906001900390816171455790505b50905060005b8260ff168160ff1610156171b357838160ff16815181106171835761718361a96f565b6020026020010151828260ff16815181106171a0576171a061a96f565b6020908102919091010152600101617160565b5093505050505b949350505050565b6171e96040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c9161726f9186910161ab66565b600060405180830381865afa15801561728c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526172b4919081019061a5e7565b905060006172c28683618a17565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b81526004016172f29190619d33565b6000604051808303816000875af1158015617311573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052617339919081019061abad565b805190915060030b158015906173525750602081015151155b80156173615750604081015151155b1561633b57816000815181106173795761737961a96f565b60200260200101516040516020016155ba919061ac63565b606060006173c68560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925286518252808701908201529091506173fd9082905b90618b6c565b1561755a57600061747a826174748461746e6174408a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b90618b93565b90618bf5565b604080518082018252600181527f0a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506174de908290618b6c565b1561754857604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617545905b8290618c7a565b90505b61755181618ca0565b925050506153ce565b82156175735784846040516020016155ba92919061ae4f565b50506040805160208101909152600081526153ce565b509392505050565b6000808251602084016000f09392505050565b615bb6828260016176bc565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691617625919061aef6565b600060405180830381855afa9150503d8060008114617660576040519150601f19603f3d011682016040523d82523d6000602084013e617665565b606091505b5091509150818015617678575060208151115b1561769157808060200190518101906171ba919061a5e7565b505060408051602081019091526000815292915050565b60006176b48383618d09565b159392505050565b8160a00151156176cb57505050565b60006176d8848484618de4565b905060006176e5826171c2565b602081015181519192509060030b1580156177815750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617781906040805180820182526000808252602091820152815180830190925284518252808501908201526173f7565b1561778e57505050505050565b604082015151156177ae5781604001516040516020016155ba919061af12565b806040516020016155ba919061af70565b606060006177f48360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617859905b8290617e27565b156178c857604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526153ce906178c390839061937f565b618ca0565b604080518082018252600181527f3a000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261792a905b8290619409565b6001036179f757604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526179909061753e565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526153ce906178c3905b8390618c7a565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617a5690617852565b15617b8d57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617abe9083906194a3565b905060008160018351617ad1919061afdb565b81518110617ae157617ae161a96f565b60200260200101519050617b846178c3617b576040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925285518252808601908201529061937f565b95945050505050565b826040516020016155ba919061afee565b50919050565b60606000617bd98360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617c3b90617852565b15617c49576153ce81618ca0565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617ca890617923565b600103617d1257604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526153ce906178c3906179f0565b604080518082018252600581527f2e6a736f6e00000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617d7190617852565b15617b8d57604080518082018252600181527f2f00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820181905284518086019095529251845283015290617dd99083906194a3565b9050600181511115617e15578060028251617df4919061afdb565b81518110617e0457617e0461a96f565b602002602001015192505050919050565b50826040516020016155ba919061afee565b805182516000911115617e3c575060006152c0565b81518351602085015160009291617e5291619ff7565b617e5c919061afdb565b905082602001518103617e735760019150506152c0565b82516020840151819020912014905092915050565b60606000617e9583619548565b600101905060008167ffffffffffffffff811115617eb557617eb5619e41565b6040519080825280601f01601f191660200182016040528015617edf576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084617ee957509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e5345440000000000000000000000000000000000000000000081840190815285518087018752838152840192909252845180860190955251845290830152606091617fb4905b82906176a8565b15617ff457505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261805390617fad565b1561809357505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d49540000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526180f290617fad565b1561813257505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261819190617fad565b806181f65750604080518082018252601081527f47504c2d322e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526181f690617fad565b1561823657505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c7900000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261829590617fad565b806182fa5750604080518082018252601081527f47504c2d332e302d6f722d6c6174657200000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526182fa90617fad565b1561833a57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261839990617fad565b806183fe5750604080518082018252601181527f4c47504c2d322e312d6f722d6c61746572000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526183fe90617fad565b1561843e57505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c79000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261849d90617fad565b806185025750604080518082018252601181527f4c47504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261850290617fad565b1561854257505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c617573650000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526185a190617fad565b156185e157505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261864090617fad565b1561868057505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e3000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526186df90617fad565b1561871f57505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261877e90617fad565b156187be57505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261881d90617fad565b1561885d57505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188bc90617fad565b806189215750604080518082018252601181527f4147504c2d332e302d6f722d6c617465720000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261892190617fad565b1561896157505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e31000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189c090617fad565b15618a0057505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b604080840151845191516155ba929060200161b0cc565b60608060005b8451811015618aa25781858281518110618a3957618a3961a96f565b6020026020010151604051602001618a5292919061a495565b604051602081830303815290604052915060018551618a71919061afdb565b8114618a9a5781604051602001618a88919061b235565b60405160208183030381529060405291505b600101618a1d565b5060408051600380825260808201909252600091816020015b6060815260200190600190039081618abb5790505090508381600081518110618ae657618ae661a96f565b60200260200101819052506040518060400160405280600281526020017f2d6300000000000000000000000000000000000000000000000000000000000081525081600181518110618b3a57618b3a61a96f565b60200260200101819052508181600281518110618b5957618b5961a96f565b6020908102919091010152949350505050565b6020808301518351835192840151600093618b8a929184919061962a565b14159392505050565b60408051808201909152600080825260208201526000618bc5846000015185602001518560000151866020015161973b565b9050836020015181618bd7919061afdb565b84518590618be690839061afdb565b90525060208401525090919050565b6040805180820190915260008082526020820152815183511015618c1a5750816152c0565b6020808301519084015160019114618c415750815160208481015190840151829020919020145b8015618c7257825184518590618c5890839061afdb565b9052508251602085018051618c6e908390619ff7565b9052505b509192915050565b6040805180820190915260008082526020820152618c9983838361985b565b5092915050565b60606000826000015167ffffffffffffffff811115618cc157618cc1619e41565b6040519080825280601f01601f191660200182016040528015618ceb576020820181803683370190505b5090506000602082019050618c998185602001518660000151619906565b8151815160009190811115618d1c575081515b6020808501519084015160005b83811015618dd55782518251808214618da5576000196020871015618d8457600184618d5689602061afdb565b618d609190619ff7565b618d6b90600861b276565b618d7690600261b374565b618d80919061afdb565b1990505b8181168382168181039114618da25797506152c09650505050505050565b50505b618db0602086619ff7565b9450618dbd602085619ff7565b93505050602081618dce9190619ff7565b9050618d29565b508451865161633b919061b380565b60606000618df0615bba565b6040805160ff808252612000820190925291925060009190816020015b6060815260200190600190039081618e0d57905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280618e689061aadc565b935060ff1681518110618e7d57618e7d61a96f565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e3300000000000000000000000000000000000000000000000000815250604051602001618ece919061b3a0565b604051602081830303815290604052828280618ee99061aadc565b935060ff1681518110618efe57618efe61a96f565b60200260200101819052506040518060400160405280600881526020017f76616c6964617465000000000000000000000000000000000000000000000000815250828280618f4b9061aadc565b935060ff1681518110618f6057618f6061a96f565b602002602001018190525082604051602001618f7c919061aa0a565b604051602081830303815290604052828280618f979061aadc565b935060ff1681518110618fac57618fac61a96f565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e747261637400000000000000000000000000000000000000000000815250828280618ff99061aadc565b935060ff168151811061900e5761900e61a96f565b60200260200101819052506190238784619980565b828261902e8161aadc565b935060ff16815181106190435761904361a96f565b6020908102919091010152855151156190ef5760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826190958161aadc565b935060ff16815181106190aa576190aa61a96f565b60200260200101819052506190c3866000015184619980565b82826190ce8161aadc565b935060ff16815181106190e3576190e361a96f565b60200260200101819052505b85608001511561915d5760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b0000000000000000602082015282826191388161aadc565b935060ff168151811061914d5761914d61a96f565b60200260200101819052506191c3565b84156191c35760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826191a28161aadc565b935060ff16815181106191b7576191b761a96f565b60200260200101819052505b6040860151511561925f5760408051808201909152600d81527f2d2d756e73616665416c6c6f77000000000000000000000000000000000000006020820152828261920d8161aadc565b935060ff16815181106192225761922261a96f565b6020026020010181905250856040015182828061923e9061aadc565b935060ff16815181106192535761925361a96f565b60200260200101819052505b8560600151156192c95760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826192a88161aadc565b935060ff16815181106192bd576192bd61a96f565b60200260200101819052505b60008160ff1667ffffffffffffffff8111156192e7576192e7619e41565b60405190808252806020026020018201604052801561931a57816020015b60608152602001906001900390816193055790505b50905060005b8260ff168160ff16101561937357838160ff16815181106193435761934361a96f565b6020026020010151828260ff16815181106193605761936061a96f565b6020908102919091010152600101619320565b50979650505050505050565b60408051808201909152600080825260208201528151835110156193a45750816152c0565b815183516020850151600092916193ba91619ff7565b6193c4919061afdb565b602084015190915060019082146193e5575082516020840151819020908220145b8015619400578351855186906193fc90839061afdb565b9052505b50929392505050565b600080826000015161942d856000015186602001518660000151876020015161973b565b6194379190619ff7565b90505b8351602085015161944b9190619ff7565b8111618c99578161945b8161b3e5565b9250508260000151619492856020015183619476919061afdb565b8651619482919061afdb565b838660000151876020015161973b565b61949c9190619ff7565b905061943a565b606060006194b18484619409565b6194bc906001619ff7565b67ffffffffffffffff8111156194d4576194d4619e41565b60405190808252806020026020018201604052801561950757816020015b60608152602001906001900390816194f25790505b50905060005b8151811015617589576195236178c38686618c7a565b8282815181106195355761953561a96f565b602090810291909101015260010161950d565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619591577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106195bd576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106195db57662386f26fc10000830492506010015b6305f5e10083106195f3576305f5e100830492506008015b612710831061960757612710830492506004015b60648310619619576064830492506002015b600a83106152c05760010192915050565b60008085841161973157602084116196dd576000841561967557600161965186602061afdb565b61965c90600861b276565b61966790600261b374565b619671919061afdb565b1990505b83518116856196848989619ff7565b61968e919061afdb565b805190935082165b8181146196c8578784116196b057879450505050506171ba565b836196ba8161b3ff565b945050828451169050619696565b6196d28785619ff7565b9450505050506171ba565b8383206196ea858861afdb565b6196f49087619ff7565b91505b85821061972f5784822080820361971c576197128684619ff7565b93505050506171ba565b61972760018461afdb565b9250506196f7565b505b5092949350505050565b6000838186851161984657602085116197f5576000851561978757600161976387602061afdb565b61976e90600861b276565b61977990600261b374565b619783919061afdb565b1990505b845181166000876197988b8b619ff7565b6197a2919061afdb565b855190915083165b8281146197e7578186106197cf576197c28b8b619ff7565b96505050505050506171ba565b856197d98161b3e5565b9650508386511690506197aa565b8596505050505050506171ba565b508383206000905b619807868961afdb565b82116198445785832080820361982357839450505050506171ba565b61982e600185619ff7565b935050818061983c9061b3e5565b9250506197fd565b505b6198508787619ff7565b979650505050505050565b6040805180820190915260008082526020820152600061988d856000015186602001518660000151876020015161973b565b6020808701805191860191909152519091506198a9908261afdb565b8352845160208601516198bc9190619ff7565b81036198cb57600085526198fd565b835183516198d99190619ff7565b855186906198e890839061afdb565b90525083516198f79082619ff7565b60208601525b50909392505050565b6020811061993e578151835261991d602084619ff7565b925061992a602083619ff7565b915061993760208261afdb565b9050619906565b600019811561996d57600161995483602061afdb565b6199609061010061b374565b61996a919061afdb565b90505b9151835183169219169190911790915250565b6060600061998e8484615c8d565b80516020808301516040519394506199a89390910161b416565b60405160208183030381529060405291505092915050565b6112a68061b46f83390190565b610ec28061c71583390190565b6040518060e00160405280606081526020016060815260200160608152602001600015158152602001600015158152602001600015158152602001619a1d619a22565b905290565b60405180610100016040528060001515815260200160001515815260200160608152602001600080191681526020016060815260200160608152602001600015158152602001619a1d6040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b81811015619ad45783516001600160a01b0316835260209384019390920191600101619aad565b509095945050505050565b60005b83811015619afa578181015183820152602001619ae2565b50506000910152565b60008151808452619b1b816020860160208601619adf565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619c2b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015619c11577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352619bfb848651619b03565b6020958601959094509290920191600101619bc1565b509197505050602094850194929092019150600101619b57565b50929695505050505050565b600081518084526020840193506020830160005b82811015619c8b5781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101619c4b565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619c2b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752619d016040880182619b03565b9050602082015191508681036020880152619d1c8183619c37565b965050506020938401939190910190600101619cbd565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619c2b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452619d95858351619b03565b94506020938401939190910190600101619d5b565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015619c2b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b0381511686526020810151905060406020870152619e2b6040870182619c37565b9550506020938401939190910190600101619dd2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c90821680619e8457607f821691505b602082108103617b9e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115619f0457806000526020600020601f840160051c81016020851015619ee45750805b601f840160051c820191505b818110156122675760008155600101619ef0565b505050565b815167ffffffffffffffff811115619f2357619f23619e41565b619f3781619f318454619e70565b84619ebd565b6020601f821160018114619f6b5760008315619f535750848201515b600019600385901b1c1916600184901b178455612267565b600084815260208120601f198516915b82811015619f9b5787850151825560209485019460019092019101619f7b565b5084821015619fb95786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156152c0576152c0619fc8565b6001600160a01b0381541682526001600160a01b03600182015416602083015260028101546040830152600060038201608060608501526000815461a04e81619e70565b806080880152600182166000811461a06d576001811461a0a75761a0db565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660a089015260a082151560051b890101935061a0db565b84600052602060002060005b8381101561a0d25781548a820160a0015260019091019060200161a0b3565b890160a0019450505b50919695505050505050565b6001600160a01b038516815283602082015260a06040820152600061a10f60a0830185619b03565b600060608401528281036080840152619850818561a00a565b60006020828403121561a13a57600080fd5b5051919050565b6001600160a01b0384168152826020820152606060408201526000617b846060830184619b03565b8281526040602082015260006171ba6040830184619b03565b6001600160a01b038516815283602082015260806040820152600061a1aa6080830185619b03565b905082606083015295945050505050565b6020815260006153ce6020830184619b03565b6001600160a01b038616815284602082015260a06040820152600061a1f660a0830186619b03565b846060840152828103608084015261a20e818561a00a565b98975050505050505050565b6001600160a01b038416815282602082015260806040820152600061a2426080830184619b03565b905060006060830152949350505050565b60008261a289577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006171ba604083018461a00a565b83815260606020820152600061a2c96060830185619b03565b828103604084015261633b818561a00a565b6001600160a01b03831681526040602082015260006171ba6040830184619b03565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a33581601a850160208801619adf565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161a37281601c840160208801619adf565b01601c01949350505050565b60006020828403121561a39057600080fd5b81516001600160a01b03811681146153ce57600080fd5b6040516060810167ffffffffffffffff8111828210171561a3ca5761a3ca619e41565b60405290565b60008067ffffffffffffffff84111561a3eb5761a3eb619e41565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561a41a5761a41a619e41565b60405283815290508082840185101561a43257600080fd5b617589846020830185619adf565b600082601f83011261a45157600080fd5b6153ce8383516020850161a3d0565b60006020828403121561a47257600080fd5b815167ffffffffffffffff81111561a48957600080fd5b6152bc8482850161a440565b6000835161a4a7818460208801619adf565b83519083019061a4bb818360208801619adf565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a4fc81601a850160208801619adf565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161a539816033840160208801619adf565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b0383166020820152606060408201526000617b846060830184619b03565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006153ce6080830184619b03565b60006020828403121561a5f957600080fd5b815167ffffffffffffffff81111561a61057600080fd5b8201601f8101841361a62157600080fd5b6152bc8482516020840161a3d0565b6000855161a642818460208a01619adf565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161a67c816001840160208a01619adf565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161a6ba816002840160208901619adf565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161a6fc816002840160208801619adf565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061a7476040830184619b03565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b60006020828403121561a79857600080fd5b815180151581146153ce57600080fd5b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161a7e081601f850160208701619adf565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061a84d6040830184619b03565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061a89f6040830184619b03565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161a916816014850160208701619adf565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061a95d6040830185619b03565b82810360208401526153ca8185619b03565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161a9d6816001850160208701619adf565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161aa1c818460208701619adf565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161aacf81604b850160208701619adf565b91909101604b0192915050565b600060ff821660ff810361aaf25761aaf2619fc8565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161ab59816029850160208701619adf565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006153ce6080830184619b03565b60006020828403121561abbf57600080fd5b815167ffffffffffffffff81111561abd657600080fd5b82016060818503121561abe857600080fd5b61abf061a3a7565b81518060030b811461ac0157600080fd5b8152602082015167ffffffffffffffff81111561ac1d57600080fd5b61ac298682850161a440565b602083015250604082015167ffffffffffffffff81111561ac4957600080fd5b61ac558682850161a440565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161acc1816021850160208701619adf565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161aead816021850160208801619adf565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161aeea81602e840160208801619adf565b01602e01949350505050565b6000825161af08818460208701619adf565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161ab59816029850160208701619adf565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161afce816022850160208701619adf565b9190910160220192915050565b818103818111156152c0576152c0619fc8565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b02681600e850160208701619adf565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b104816018850160208801619adf565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b14181601c840160208801619adf565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161b247818460208701619adf565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b80820281158282048414176152c0576152c0619fc8565b6001815b600184111561b2c85780850481111561b2ac5761b2ac619fc8565b600184161561b2ba57908102905b60019390931c92800261b291565b935093915050565b60008261b2df575060016152c0565b8161b2ec575060006152c0565b816001811461b302576002811461b30c5761b328565b60019150506152c0565b60ff84111561b31d5761b31d619fc8565b50506001821b6152c0565b5060208310610133831016604e8410600b841016171561b34b575081810a6152c0565b61b358600019848461b28d565b806000190482111561b36c5761b36c619fc8565b029392505050565b60006153ce838361b2d0565b8181036000831280158383131683831282161715618c9957618c99619fc8565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161b3d881601c850160208701619adf565b91909101601c0192915050565b6000600019820361b3f85761b3f8619fc8565b5060010190565b60008161b40e5761b40e619fc8565b506000190190565b6000835161b428818460208801619adf565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161b462816001840160208801619adf565b0160010194935050505056fe608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122001ec0ce060384773f3d3389fab7bed652c6b8ee389a7471cce10d00d87a75a0c64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610e9e806100246000396000f3fe60806040526004361061006e5760003560e01c8063c51316911161004b578063c5131691146100d5578063c9028a36146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a214610077578063676cc054146100975780636ed70169146100c057005b3661007557005b005b34801561008357600080fd5b506100756100923660046106ec565b610148565b6100aa6100a5366004610728565b6101de565b6040516100b79190610823565b60405180910390f35b3480156100cc57600080fd5b50610075610222565b3480156100e157600080fd5b506100756100f03660046106ec565b610257565b34801561010157600080fd5b50610075610110366004610836565b610332565b610075610123366004610996565b61036e565b34801561013457600080fd5b50610075610143366004610a82565b6103b2565b6101506103e7565b61017273ffffffffffffffffffffffffffffffffffffffff831633838661042a565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a1506040805160208101909152600081525b9392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61025f6103e7565b600061026c600285610b6c565b9050806000036102a8576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102ca73ffffffffffffffffffffffffffffffffffffffff841633848461042a565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f689a5a5cb55e795ffe4cd8b419cd3bb0a3373974c54d25f64e734d7388b93e9b3382604051610363929190610bf0565b60405180910390a150565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa33348585856040516103a5959493929190610ce2565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103a59493929190610d6c565b600260005403610423576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104bf9085906104c5565b50505050565b60006104e773ffffffffffffffffffffffffffffffffffffffff841683610560565b9050805160001415801561050c57508080602001905181019061050a9190610e2f565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061021b83836000846000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105939190610e4c565b60006040518083038185875af1925050503d80600081146105d0576040519150601f19603f3d011682016040523d82523d6000602084013e6105d5565b606091505b50915091506105e58683836105ef565b9695505050505050565b606082610604576105ff8261067e565b61021b565b8151158015610628575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610677576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610557565b508061021b565b80511561068e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106e757600080fd5b919050565b60008060006060848603121561070157600080fd5b83359250610711602085016106c3565b915061071f604085016106c3565b90509250925092565b6000806000838503604081121561073e57600080fd5b602081121561074c57600080fd5b50839250602084013567ffffffffffffffff81111561076a57600080fd5b8401601f8101861361077b57600080fd5b803567ffffffffffffffff81111561079257600080fd5b8660208284010111156107a457600080fd5b939660209190910195509293505050565b60005b838110156107d05781810151838201526020016107b8565b50506000910152565b600081518084526107f18160208601602086016107b5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061021b60208301846107d9565b60006020828403121561084857600080fd5b813567ffffffffffffffff81111561085f57600080fd5b82016080818503121561021b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156108e7576108e7610871565b604052919050565b600082601f83011261090057600080fd5b813567ffffffffffffffff81111561091a5761091a610871565b61094b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108a0565b81815284602083860101111561096057600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106c057600080fd5b80356106e78161097d565b6000806000606084860312156109ab57600080fd5b833567ffffffffffffffff8111156109c257600080fd5b6109ce868287016108ef565b9350506020840135915060408401356109e68161097d565b809150509250925092565b600067ffffffffffffffff821115610a0b57610a0b610871565b5060051b60200190565b600082601f830112610a2657600080fd5b8135610a39610a34826109f1565b6108a0565b8082825260208201915060208360051b860101925085831115610a5b57600080fd5b602085015b83811015610a78578035835260209283019201610a60565b5095945050505050565b600080600060608486031215610a9757600080fd5b833567ffffffffffffffff811115610aae57600080fd5b8401601f81018613610abf57600080fd5b8035610acd610a34826109f1565b8082825260208201915060208360051b850101925088831115610aef57600080fd5b602084015b83811015610b3157803567ffffffffffffffff811115610b1357600080fd5b610b228b6020838901016108ef565b84525060209283019201610af4565b509550505050602084013567ffffffffffffffff811115610b5157600080fd5b610b5d86828701610a15565b92505061071f6040850161098b565b600082610ba2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2e836106c3565b16604082015273ffffffffffffffffffffffffffffffffffffffff610c55602084016106c3565b166060820152600080604084013590508060808401525060608301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610ca157600080fd5b830160208101903567ffffffffffffffff811115610cbe57600080fd5b803603821315610ccd57600080fd5b608060a08501526105e560c085018284610ba7565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d1760a08301866107d9565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610d62578151865260209586019590910190600101610d44565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610dff577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610dea8583516107d9565b94506020938401939190910190600101610db0565b505050508281036040840152610e158186610d30565b915050610e26606083018415159052565b95945050505050565b600060208284031215610e4157600080fd5b815161021b8161097d565b60008251610e5e8184602087016107b5565b919091019291505056fea26469706673582212200121b4788f0b35a4b6df21db4f43708a9b20e8b16f616e6f3300230e75bbdd1364736f6c634300081a00335a657461436f6e6e6563746f724e6f6e4e617469766555706772616465546573742e736f6ca26469706673582212204a491a9e46b17d4b2cbd6d1728e5394c5357f9f5c24584e5d9dd1ba6e57f3f3d64736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"IS_TEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"excludeSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"excludedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"failed\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setUp\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"targetArtifactSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"components\":[{\"name\":\"artifact\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetArtifacts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedArtifacts_\",\"type\":\"string[]\",\"internalType\":\"string[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetContracts\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedContracts_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetInterfaces\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"artifacts\",\"type\":\"string[]\",\"internalType\":\"string[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSelectors\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\",\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"components\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selectors\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"targetSenders\",\"inputs\":[],\"outputs\":[{\"name\":\"targetedSenders_\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"testSexMaxSupplyFailsIfSenderIsNotTss\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testUpgradeAndWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdraw\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveERC20Partial\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveNoParams\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveOnCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevert\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfMaxSupplyIsReached\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawAndRevertFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawFailsIfSenderIsNotWithdrawer\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"testWithdrawTogglePause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Called\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposited\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"asset\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertOptions\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertOptions\",\"components\":[{\"name\":\"revertAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"callOnRevert\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"abortAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"onRevertGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Executed\",\"inputs\":[{\"name\":\"destination\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutedWithERC20\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedERC20\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"destination\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNoParams\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedNonPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strs\",\"type\":\"string[]\",\"indexed\":false,\"internalType\":\"string[]\"},{\"name\":\"nums\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedOnCall\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedPayable\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"str\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"num\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"flag\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReceivedRevert\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedGatewayTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_address\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_array\",\"inputs\":[{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_bytes32\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_int\",\"inputs\":[{\"name\":\"\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_address\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256[]\",\"indexed\":false,\"internalType\":\"int256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_array\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"address[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_bytes32\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_decimal_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"decimals\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_int\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_string\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_named_uint\",\"inputs\":[{\"name\":\"key\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"val\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_string\",\"inputs\":[{\"name\":\"\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"log_uint\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"logs\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ApprovalFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ConnectorInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CustodyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DepositFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutionFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientERC20Amount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientETHAmount\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAllowedToCallOnRevert\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotWhitelistedInCustody\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadSizeExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x600c8054600160ff199182168117909255601f8054909116909117905560a06040526000608052602c80546001600160a01b0319169055348015604157600080fd5b5061dd18806100516000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c8063aaf741921161010f578063d509b16c116100a2578063e63ab1e911610071578063e63ab1e91461037d578063fa7626d4146103a4578063fdca9052146103b1578063fe574f84146103b957600080fd5b8063d509b16c1461035d578063dcf7d03714610365578063de1cb76c1461036d578063e20c9f711461037557600080fd5b8063b5508aa9116100de578063b5508aa91461032d578063ba414fa614610335578063c19099721461034d578063ccb0e3f21461035557600080fd5b8063aaf741921461030d578063af298bb114610315578063b0464fdc1461031d578063b0a64d031461032557600080fd5b806366d9a9a01161018757806385f438c11161015657806385f438c114610294578063916a17c6146102c957806395665330146102de578063a783c789146102e657600080fd5b806366d9a9a01461025a5780637db20efb1461026f578063828320141461027757806385226c811461027f57600080fd5b80633cba0107116101c35780633cba01071461023a5780633e5e3c23146102425780633f7286f41461024a578063493465581461025257600080fd5b80630a9254e4146101f55780631ed7831c146101ff5780632506ef031461021d5780632ade388014610225575b600080fd5b6101fd6103c1565b005b610207610ba4565b604051610214919061a0b8565b60405180910390f35b6101fd610c06565b61022d610eba565b604051610214919061a154565b6101fd610ffc565b6102076117a2565b610207611802565b6101fd611862565b610262611e11565b604051610214919061a2ba565b6101fd611f93565b6101fd612232565b610287612492565b604051610214919061a358565b6102bb7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b604051908152602001610214565b6102d1612562565b604051610214919061a3cf565b6101fd61265d565b6102bb7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b6101fd6128a6565b6101fd612b25565b6102d1612f56565b6101fd613051565b61028761352b565b61033d6135fb565b6040519015158152602001610214565b6101fd6136cf565b6101fd613940565b6101fd614454565b6101fd61478e565b6101fd614d99565b61020761547b565b6102bb7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b601f5461033d9060ff1681565b6101fd6154db565b6101fd6156dc565b602480547fffffffffffffffffffffffff000000000000000000000000000000000000000090811630179091556025805482166112341790556026805482166156789081179091556027805490921661987617909155604051819061042590619fe5565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015610458573d6000803e3d6000fd5b50602380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316908117909155604080518082018252600e81527f4761746577617945564d2e736f6c00000000000000000000000000000000000060208201526026546024805493519186169082015260448101939093529216606482015260009161054a916084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc0c53b8b000000000000000000000000000000000000000000000000000000001790526158cc565b601f80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0384811682029290921792839055604080518082018252601081527f4552433230437573746f64792e736f6c00000000000000000000000000000000602082015260265460248054935194909604851695840195909552938316604483015290911660648201529192506105f0916084016104ed565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691909117909155604080518082018252601a81527f5a657461436f6e6e6563746f724e6f6e4e61746976652e736f6c0000000000006020820152601f546023546026546024805495516101009094048716908401529085166044830152841660648201529190921660848201529192506106f59160a40160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff8c8765e000000000000000000000000000000000000000000000000000000001790526158cc565b602280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038381169190911790915560265460405163ca669fa760e01b815291166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561078057600080fd5b505af1158015610794573d6000803e3d6000fd5b50506023546026546022546040517f15d57fd40000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529082166024820152911692506315d57fd49150604401600060405180830381600087803b15801561080557600080fd5b505af1158015610819573d6000803e3d6000fd5b5050505060405161082990619ff2565b604051809103906000f080158015610845573d6000803e3d6000fd5b50602080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039283161790556026546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815291166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b1580156108f157600080fd5b505af1158015610905573d6000803e3d6000fd5b5050602480546040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d93506306447d56925001600060405180830381600087803b15801561097a57600080fd5b505af115801561098e573d6000803e3d6000fd5b5050601f546021546040517fae7a3a6f0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015261010090920416925063ae7a3a6f9150602401600060405180830381600087803b1580156109f957600080fd5b505af1158015610a0d573d6000803e3d6000fd5b5050601f546022546040517f10188aef0000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526101009092041692506310188aef9150602401600060405180830381600087803b158015610a7857600080fd5b505af1158015610a8c573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610aee57600080fd5b505af1158015610b02573d6000803e3d6000fd5b5050604080516080810182526024546001600160a01b039081168252602354811660208084019182526001848601908152855191820190955260008152606084018190528351602880549185167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178155925160298054919095169116179092559251602a55909350909150602b90610b9e908261a52e565b50505050565b60606016805480602002602001604051908101604052809291908181526020018280548015610bfc57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610bde575b5050505050905090565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015610ca157600080fd5b505af1158015610cb5573d6000803e3d6000fd5b50506022546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b158015610d1857600080fd5b505af1158015610d2c573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015610d8957600080fd5b505af1158015610d9d573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015610e2657600080fd5b505af1158015610e3a573d6000803e3d6000fd5b50506022546020546001600160a01b039182169350636f8728ad925016610e6285600161a61c565b8460286040518563ffffffff1660e01b8152600401610e84949392919061a70c565b600060405180830381600087803b158015610e9e57600080fd5b505af1158015610eb2573d6000803e3d6000fd5b505050505050565b6060601e805480602002602001604051908101604052809291908181526020016000905b82821015610ff357600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610fdc578382906000526020600020018054610f4f9061a495565b80601f0160208091040260200160405190810160405280929190818152602001828054610f7b9061a495565b8015610fc85780601f10610f9d57610100808354040283529160200191610fc8565b820191906000526020600020905b815481529060010190602001808311610fab57829003601f168201915b505050505081526020019060010190610f30565b505050508152505081526020019060010190610ede565b50505050905090565b602354602554604051620186a0602482018190526001600160a01b039384166044830152929091166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260235460255491516370a0823160e01b81526001600160a01b0392831660048201529293506000929116906370a0823190602401602060405180830381865afa1580156110da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110fe919061a74d565b905061110b8160006158eb565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561115c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611180919061a74d565b905061118d8160006158eb565b601f546040516101009091046001600160a01b03166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611278916001600160a01b039190911690600090869060040161a766565b600060405180830381600087803b15801561129257600080fd5b505af11580156112a6573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561131f57600080fd5b505af1158015611333573d6000803e3d6000fd5b5050601f54602354602554604080516101009094046001600160a01b039081168552602085018d9052928316908401521660608201527f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609250608001905060405180910390a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561140e57600080fd5b505af1158015611422573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d9150611467908990889061a78e565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156114c857600080fd5b505af11580156114dc573d6000803e3d6000fd5b50506022546020546040517f6fb9a7af0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450636fb9a7af935061153592602c9216908b908a908c9060040161a7a7565b600060405180830381600087803b15801561154f57600080fd5b505af1158015611563573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156115b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115da919061a74d565b90506115e681886158eb565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611637573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165b919061a74d565b90506116688160006158eb565b602354601f546020546040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526101009092046001600160a01b0390811660048401529081166024830152600092169063dd62ed3e90604401602060405180830381865afa1580156116e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611704919061a74d565b90506117118160006158eb565b602354601f546040516370a0823160e01b81526101009091046001600160a01b03908116600483015260009216906370a0823190602401602060405180830381865afa158015611765573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611789919061a74d565b90506117968160006158eb565b50505050505050505050565b60606018805480602002602001604051908101604052809291908181526020018280548015610bfc576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610bde575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610bfc576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610bde575050505050905090565b6040805160048082526024820183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6ed701690000000000000000000000000000000000000000000000000000000017905260235460255493516370a0823160e01b8152620186a0946000949385936001600160a01b03908116936370a082319361190493921691016001600160a01b0391909116815260200190565b602060405180830381865afa158015611921573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611945919061a74d565b90506119528160006158eb565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156119a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c7919061a74d565b90506119d48160006158eb565b601f546040516101009091046001600160a01b03166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391611abf916001600160a01b039190911690600090869060040161a766565b600060405180830381600087803b158015611ad957600080fd5b505af1158015611aed573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015611b6657600080fd5b505af1158015611b7a573d6000803e3d6000fd5b5050601f546040516101009091046001600160a01b031681527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09250602001905060405180910390a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015611c3857600080fd5b505af1158015611c4c573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d9150611c91908990889061a78e565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611cf257600080fd5b505af1158015611d06573d6000803e3d6000fd5b50506022546020546040517f6fb9a7af0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450636fb9a7af9350611d5f92602c9216908b908a908c9060040161a7a7565b600060405180830381600087803b158015611d7957600080fd5b505af1158015611d8d573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015611de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e04919061a74d565b90506115e68160006158eb565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610ff35783829060005260206000209060020201604051806040016040529081600082018054611e689061a495565b80601f0160208091040260200160405190810160405280929190818152602001828054611e949061a495565b8015611ee15780601f10611eb657610100808354040283529160200191611ee1565b820191906000526020600020905b815481529060010190602001808311611ec457829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611f7b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411611f285790505b50505050508152505081526020019060010190611e35565b60265460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015611ff157600080fd5b505af1158015612005573d6000803e3d6000fd5b50506022546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b15801561206857600080fd5b505af115801561207c573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156120d957600080fd5b505af11580156120ed573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b15801561217657600080fd5b505af115801561218a573d6000803e3d6000fd5b50506022546020546001600160a01b03918216935063106e62909250166121b284600161a61c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039092166004830152602482015260006044820152606401600060405180830381600087803b15801561221757600080fd5b505af115801561222b573d6000803e3d6000fd5b5050505050565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f19018152908290526024805463ca669fa760e01b84526001600160a01b03166004840152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b1580156122cf57600080fd5b505af11580156122e3573d6000803e3d6000fd5b505060248054604080516001600160a01b03909216928201929092527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506123d2919060040161a7f1565b600060405180830381600087803b1580156123ec57600080fd5b505af1158015612400573d6000803e3d6000fd5b50506022546020546040517f6f8728ad0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450636f8728ad935061245b929091169087908690889060289060040161a804565b600060405180830381600087803b15801561247557600080fd5b505af1158015612489573d6000803e3d6000fd5b50505050505050565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015610ff35783829060005260206000200180546124d59061a495565b80601f01602080910402602001604051908101604052809291908181526020018280546125019061a495565b801561254e5780601f106125235761010080835404028352916020019161254e565b820191906000526020600020905b81548152906001019060200180831161253157829003601f168201915b5050505050815260200190600101906124b6565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015610ff35760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561264557602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116125f25790505b50505050508152505081526020019060010190612586565b604080518082018252600181527f310000000000000000000000000000000000000000000000000000000000000060208201529051620186a091600091610123919083906126b1908490849060240161a850565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f676cc05400000000000000000000000000000000000000000000000000000000179052517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fed699775000000000000000000000000000000000000000000000000000000006004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c31eb0e090602401600060405180830381600087803b15801561278f57600080fd5b505af11580156127a3573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801561280057600080fd5b505af1158015612814573d6000803e3d6000fd5b50506022546020546040517f6fb9a7af0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450636fb9a7af935061286d92602c9216908a9087908b9060040161a7a7565b600060405180830381600087803b15801561288757600080fd5b505af115801561289b573d6000803e3d6000fd5b505050505050505050565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a09060009060250160408051808303601f190181529082905260265463ca669fa760e01b83526001600160a01b031660048301529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561294157600080fd5b505af1158015612955573d6000803e3d6000fd5b50506022546040517f6f8b44b0000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b1580156129b857600080fd5b505af11580156129cc573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015612a2957600080fd5b505af1158015612a3d573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fc30436e9000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015612ac657600080fd5b505af1158015612ada573d6000803e3d6000fd5b50506022546020546001600160a01b039182169350636fb9a7af9250602c9116612b0586600161a61c565b856040518563ffffffff1660e01b8152600401610e84949392919061a872565b60225460408051606081019091526025808252612b6f926001600160a01b0316919061dcbe60208301396040805160208101909152600081526024546001600160a01b031661596a565b6022546023546025546040516370a0823160e01b81526001600160a01b03918216600482015292811692620186a09260009216906370a0823190602401602060405180830381865afa158015612bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bed919061a74d565b9050612bfa8160006158eb565b6025546040516001600160a01b0390911660248201526044810183905260006064820181905290819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391612ce3916001600160a01b039190911690600090869060040161a766565b600060405180830381600087803b158015612cfd57600080fd5b505af1158015612d11573d6000803e3d6000fd5b50506040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b0388166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015612d8657600080fd5b505af1158015612d9a573d6000803e3d6000fd5b50506025546040518781526001600160a01b0390911692507f3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee9915060200160405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015612e3957600080fd5b505af1158015612e4d573d6000803e3d6000fd5b50506025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810188905260448101869052908816925063106e62909150606401600060405180830381600087803b158015612ebf57600080fd5b505af1158015612ed3573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015612f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4a919061a74d565b9050610eb281866158eb565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015610ff35760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561303957602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411612fe65790505b50505050508152505081526020019060010190612f7a565b604080518082018252600181527f3100000000000000000000000000000000000000000000000000000000000000602082015260235460255492516370a0823160e01b81526001600160a01b039384166004820152620186a0936000936101239390928592909116906370a0823190602401602060405180830381865afa1580156130e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613104919061a74d565b90506131118160006158eb565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015613162573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613186919061a74d565b6020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156131fe57600080fd5b505af1158015613212573d6000803e3d6000fd5b505050507fd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501848460405161324792919061a850565b60405180910390a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b1580156132c457600080fd5b505af11580156132d8573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d915061331d908990879061a78e565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561337e57600080fd5b505af1158015613392573d6000803e3d6000fd5b505060225460408051602080820183526001600160a01b038a81168352905492517f6fb9a7af0000000000000000000000000000000000000000000000000000000081529381169550636fb9a7af94506133f893919216908b9089908c9060040161a8bc565b600060405180830381600087803b15801561341257600080fd5b505af1158015613426573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015613479573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061349d919061a74d565b90506134aa8160006158eb565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156134fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061351f919061a74d565b905061166881846158eb565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610ff357838290600052602060002001805461356e9061a495565b80601f016020809104026020016040519081016040528092919081815260200182805461359a9061a495565b80156135e75780601f106135bc576101008083540402835291602001916135e7565b820191906000526020600020905b8154815290600101906020018083116135ca57829003601f168201915b50505050508152602001906001019061354f565b60085460009060ff1615613613575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c65640000000000000000000000000000000000000000000000000000602483015260009163667f9d7090604401602060405180830381865afa1580156136a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c8919061a74d565b1415905090565b602354602554604051620186a0602482018190526001600160a01b039384166044830152929091166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f357fc5a20000000000000000000000000000000000000000000000000000000017905260248054915163ca669fa760e01b81526001600160a01b039092166004830152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b1580156137b657600080fd5b505af11580156137ca573d6000803e3d6000fd5b505060248054604080516001600160a01b03909216928201929092527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb392506138b9919060040161a7f1565b600060405180830381600087803b1580156138d357600080fd5b505af11580156138e7573d6000803e3d6000fd5b50506022546020546040517f6fb9a7af0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450636fb9a7af935061245b92602c92169088908790899060040161a7a7565b60275460405163ca669fa760e01b81526001600160a01b039091166004820152620186a090600090737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156139a157600080fd5b505af11580156139b5573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613aa0919060040161a7f1565b600060405180830381600087803b158015613aba57600080fd5b505af1158015613ace573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613b2257600080fd5b505af1158015613b36573d6000803e3d6000fd5b505060275460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613b9357600080fd5b505af1158015613ba7573d6000803e3d6000fd5b5050602754604080516001600160a01b0390921660248301527f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a60448084019190915281518084039091018152606490920181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f00000000000000000000000000000000000000000000000000000000179052517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250613c92919060040161a7f1565b600060405180830381600087803b158015613cac57600080fd5b505af1158015613cc0573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d1457600080fd5b505af1158015613d28573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613d8557600080fd5b505af1158015613d99573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ded57600080fd5b505af1158015613e01573d6000803e3d6000fd5b50506040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd93c0665000000000000000000000000000000000000000000000000000000006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063c31eb0e09150602401600060405180830381600087803b158015613e8a57600080fd5b505af1158015613e9e573d6000803e3d6000fd5b505060265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015613efb57600080fd5b505af1158015613f0f573d6000803e3d6000fd5b50506022546025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401600060405180830381600087803b158015613f8357600080fd5b505af1158015613f97573d6000803e3d6000fd5b50506024805460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063ca669fa7925001600060405180830381600087803b158015613ff357600080fd5b505af1158015614007573d6000803e3d6000fd5b50505050602260009054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561405b57600080fd5b505af115801561406f573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156140c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140e6919061a74d565b90506140f38160006158eb565b6025546040516001600160a01b039091166024820152604481018490526064810183905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916141da916001600160a01b039190911690600090869060040161a766565b600060405180830381600087803b1580156141f457600080fd5b505af1158015614208573d6000803e3d6000fd5b50506022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561428157600080fd5b505af1158015614295573d6000803e3d6000fd5b50506025546040518781526001600160a01b0390911692507f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5915060200160405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561433457600080fd5b505af1158015614348573d6000803e3d6000fd5b50506022546025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018890529116925063106e629091506064015b600060405180830381600087803b1580156143bd57600080fd5b505af11580156143d1573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614424573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614448919061a74d565b905061222b81866158eb565b6023546025546040516370a0823160e01b81526001600160a01b039182166004820152620186a09260009216906370a0823190602401602060405180830381865afa1580156144a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144cb919061a74d565b90506144d88160006158eb565b6025546040516001600160a01b0390911660248201526044810183905260006064820181905290819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba3916145c1916001600160a01b039190911690600090869060040161a766565b600060405180830381600087803b1580156145db57600080fd5b505af11580156145ef573d6000803e3d6000fd5b50506022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561466857600080fd5b505af115801561467c573d6000803e3d6000fd5b50506025546040518781526001600160a01b0390911692507f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5915060200160405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801561471b57600080fd5b505af115801561472f573d6000803e3d6000fd5b50506022546025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101899052604481018790529116925063106e629091506064016143a3565b602354602554604051620186a0602482018190526001600160a01b039384166044830152929091166064820152600090819060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc51316910000000000000000000000000000000000000000000000000000000017905260235460255491516370a0823160e01b81526001600160a01b0392831660048201529293506000929116906370a0823190602401602060405180830381865afa15801561486c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614890919061a74d565b905061489d8160006158eb565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156148ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614912919061a74d565b905061491f8160006158eb565b601f546040516101009091046001600160a01b03166024820152604481018690526064810185905260009060840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1e458bee0000000000000000000000000000000000000000000000000000000017905260235490517ff30c7ba3000000000000000000000000000000000000000000000000000000008152919250737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f30c7ba391614a0a916001600160a01b039190911690600090869060040161a766565b600060405180830381600087803b158015614a2457600080fd5b505af1158015614a38573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b158015614ab157600080fd5b505af1158015614ac5573d6000803e3d6000fd5b5050601f547f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af60925061010090046001600160a01b03169050614b0860028961a8f4565b602354602554604080516001600160a01b03958616815260208101949094529184168383015292909216606082015290519081900360800190a16022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b158015614bb757600080fd5b505af1158015614bcb573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d9150614c10908990889061a78e565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015614c7157600080fd5b505af1158015614c85573d6000803e3d6000fd5b50506022546020546040517f6fb9a7af0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450636fb9a7af9350614cde92602c9216908b908a908c9060040161a7a7565b600060405180830381600087803b158015614cf857600080fd5b505af1158015614d0c573d6000803e3d6000fd5b50506023546025546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa158015614d5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d83919061a74d565b90506115e681614d9460028a61a8f4565b6158eb565b6040517f68656c6c6f0000000000000000000000000000000000000000000000000000006020820152620186a090600090819060250160408051808303601f19018152908290526023546020546370a0823160e01b84526001600160a01b0390811660048501529193506000929116906370a0823190602401602060405180830381865afa158015614e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e53919061a74d565b9050614e608160006158eb565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015614eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ed5919061a74d565b601f54604080516001600160a01b036101009093048316602482015260448101899052606480820189905282518083039091018152608490910182526020810180517f1e458bee000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617905260235491517ff30c7ba300000000000000000000000000000000000000000000000000000000815293945092737109709ecfa91a80626ff3989d68f67f5b1dd12d9263f30c7ba392614fb792911690600090869060040161a766565b600060405180830381600087803b158015614fd157600080fd5b505af1158015614fe5573d6000803e3d6000fd5b50506020546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d92506381bad6f3915060a401600060405180830381600087803b15801561505e57600080fd5b505af1158015615072573d6000803e3d6000fd5b505050507f689a5a5cb55e795ffe4cd8b419cd3bb0a3373974c54d25f64e734d7388b93e9b601f60019054906101000a90046001600160a01b031660286040516150bd92919061a92f565b60405180910390a1601f546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526101009091046001600160a01b03166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561513e57600080fd5b505af1158015615152573d6000803e3d6000fd5b50506023546020546040516001600160a01b039283169450911691507fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e035906151a0908a90899060289061a951565b60405180910390a36022546040516381bad6f360e01b8152600160048201819052602482018190526044820181905260648201526001600160a01b039091166084820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906381bad6f39060a401600060405180830381600087803b15801561521d57600080fd5b505af1158015615231573d6000803e3d6000fd5b50506020546040516001600160a01b0390911692507f5272d2fee39bff41b2e763562526315906046373ce08a7bacf76c3080d731ff09150615279908990889060289061a951565b60405180910390a260265460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156152da57600080fd5b505af11580156152ee573d6000803e3d6000fd5b50506022546020546040517f6f8728ad0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169450636f8728ad935061534992909116908a9089908b9060289060040161a804565b600060405180830381600087803b15801561536357600080fd5b505af1158015615377573d6000803e3d6000fd5b50506023546020546040516370a0823160e01b81526001600160a01b03918216600482015260009450911691506370a0823190602401602060405180830381865afa1580156153ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906153ee919061a74d565b90506153fa81886158eb565b6023546022546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561544b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061546f919061a74d565b905061166881856158eb565b60606015805480602002602001604051908101604052809291908181526020018280548015610bfc576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610bde575050505050905090565b6024805460405163ca669fa760e01b81526001600160a01b039091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b15801561553357600080fd5b505af1158015615547573d6000803e3d6000fd5b505060248054604080516001600160a01b03909216928201929092527f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb60448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb39250615636919060040161a7f1565b600060405180830381600087803b15801561565057600080fd5b505af1158015615664573d6000803e3d6000fd5b50506022546040517f6f8b44b000000000000000000000000000000000000000000000000000000000815261271060048201526001600160a01b039091169250636f8b44b09150602401600060405180830381600087803b1580156156c857600080fd5b505af1158015610b9e573d6000803e3d6000fd5b6024805460405163ca669fa760e01b81526001600160a01b039091166004820152620186a091600091737109709ecfa91a80626ff3989d68f67f5b1dd12d9163ca669fa79101600060405180830381600087803b15801561573c57600080fd5b505af1158015615750573d6000803e3d6000fd5b505060248054604080516001600160a01b03909216928201929092527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e460448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2517d3f0000000000000000000000000000000000000000000000000000000017905290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d935063f28dceb3925061583f919060040161a7f1565b600060405180830381600087803b15801561585957600080fd5b505af115801561586d573d6000803e3d6000fd5b50506022546025546040517f106e62900000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101879052604481018690529116925063106e62909150606401610e84565b60006158d6619fff565b6158e184848361597f565b9150505b92915050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c549060440160006040518083038186803b15801561595657600080fd5b505afa158015610eb2573d6000803e3d6000fd5b615972619fff565b61222b85858584866159fa565b60008061598c8584615afa565b90506159ef6040518060400160405280601d81526020017f4552433139363750726f78792e736f6c3a4552433139363750726f787900000081525082866040516020016159da92919061a850565b60405160208183030381529060405285615b06565b9150505b9392505050565b6040517f06447d560000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528190737109709ecfa91a80626ff3989d68f67f5b1dd12d9081906306447d5690602401600060405180830381600087803b158015615a6c57600080fd5b505af1925050508015615a7d575060015b615a9257615a8d87878787615b34565b612489565b615a9e87878787615b34565b806001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015615ad957600080fd5b505af1158015615aed573d6000803e3d6000fd5b5050505050505050505050565b60006159f38383615b4d565b60c08101515160009015615b2a57615b2384848460c00151615b68565b90506159f3565b615b238484615d0e565b6000615b408483615df9565b905061222b858285615e05565b6000615b5983836161cf565b6159f383836020015184615b06565b600080615b736161df565b90506000615b8186836162b2565b90506000615b988260600151836020015185616758565b90506000615ba88383898961696a565b90506000615bb5826177e7565b602081015181519192509060030b15615c2857898260400151604051602001615bdf92919061a97c565b60408051601f19818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252615c1f9160040161a7f1565b60405180910390fd5b6000615c6b6040518060400160405280601581526020017f4465706c6f79656420746f20616464726573733a2000000000000000000000008152508360016179b6565b6040517fc6ce059d000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c6ce059d90615cbe90849060040161a7f1565b602060405180830381865afa158015615cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615cff919061a9fd565b9b9a5050505050505050505050565b6040517f8d1cc9250000000000000000000000000000000000000000000000000000000081526000908190737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590615d6390879060040161a7f1565b600060405180830381865afa158015615d80573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052615da8919081019061aadf565b90506000615dd68285604051602001615dc292919061ab14565b604051602081830303815290604052617bb6565b90506001600160a01b0381166158e1578484604051602001615bdf92919061ab43565b6000615b598383617bc9565b6040517f667f9d700000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90600090829063667f9d7090604401602060405180830381865afa158015615ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190615ec5919061a74d565b90508061606c576000615ed786617bd5565b604080518082018252600581527f352e302e3000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150615f62905b60408051808201825260008082526020918201528151808301909252845182528085019082015290617ccd565b80615f6e575060008451115b15615ff1576040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03871690634f1ef28690615fba908890889060040161a850565b600060405180830381600087803b158015615fd457600080fd5b505af1158015615fe8573d6000803e3d6000fd5b50505050616066565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152871690633659cfe690602401600060405180830381600087803b15801561604d57600080fd5b505af1158015616061573d6000803e3d6000fd5b505050505b5061222b565b80600061607882617bd5565b604080518082018252600581527f352e302e30000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201529091506160da90615f35565b806160e6575060008551115b1561616b576040517f9623609d0000000000000000000000000000000000000000000000000000000081526001600160a01b03831690639623609d90616134908a908a908a9060040161abee565b600060405180830381600087803b15801561614e57600080fd5b505af1158015616162573d6000803e3d6000fd5b50505050612489565b6040517f99a88ec40000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301528316906399a88ec490604401600060405180830381600087803b158015615ad957600080fd5b6161db82826000617ce1565b5050565b604080518082018252600381527f6f75740000000000000000000000000000000000000000000000000000000000602082015290517fd145736c000000000000000000000000000000000000000000000000000000008152606091737109709ecfa91a80626ff3989d68f67f5b1dd12d91829063d145736c9061626690849060040161ac1f565b600060405180830381865afa158015616283573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526162ab919081019061ac66565b9250505090565b6162e46040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d905061632f6040518060a0016040528060608152602001606081526020016060815260200160608152602001606081525090565b61633885617de4565b60208201526000616348866181c9565b90506000836001600160a01b031663d930a0e66040518163ffffffff1660e01b8152600401600060405180830381865afa15801561638a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526163b2919081019061ac66565b868385602001516040516020016163cc949392919061acaf565b60408051601f19818403018152908290527f60f9bb1100000000000000000000000000000000000000000000000000000000825291506000906001600160a01b038616906360f9bb119061642490859060040161a7f1565b600060405180830381865afa158015616441573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616469919081019061ac66565b6040517fdb4235f60000000000000000000000000000000000000000000000000000000081529091506001600160a01b0386169063db4235f6906164b190849060040161adb3565b602060405180830381865afa1580156164ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906164f2919061ae05565b6165075781604051602001615bdf919061ae27565b6040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061654c90849060040161aeb9565b600060405180830381865afa158015616569573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616591919081019061ac66565b84526040517fdb4235f60000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063db4235f6906165d890849060040161af0b565b602060405180830381865afa1580156165f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190616619919061ae05565b156166ae576040517f49c4fac80000000000000000000000000000000000000000000000000000000081526001600160a01b038616906349c4fac89061666390849060040161af0b565b600060405180830381865afa158015616680573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526166a8919081019061ac66565b60408501525b846001600160a01b03166349c4fac88286600001516040516020016166d3919061af5d565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016166ff92919061afc9565b600060405180830381865afa15801561671c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616744919081019061ac66565b606085015250608083015250949350505050565b60408051600480825260a0820190925260609160009190816020015b60608152602001906001900390816167745790505090506040518060400160405280600481526020017f6772657000000000000000000000000000000000000000000000000000000000815250816000815181106167d4576167d461afee565b60200260200101819052506040518060400160405280600381526020017f2d726c0000000000000000000000000000000000000000000000000000000000815250816001815181106168285761682861afee565b602002602001018190525084604051602001616844919061b01d565b604051602081830303815290604052816002815181106168665761686661afee565b602002602001018190525082604051602001616882919061b089565b604051602081830303815290604052816003815181106168a4576168a461afee565b602002602001018190525060006168ba826177e7565b602080820151604080518082018252600581527f2e6a736f6e000000000000000000000000000000000000000000000000000000818501908152825180840184526000808252908601528251808401909352905182529281019290925291925061694b906040805180820182526000808252602091820152815180830190925284518252808501908201529061844c565b6169605785604051602001615bdf919061b0ca565b9695505050505050565b60a0810151604080518082018252600080825260209182015281518083019092528251808352928101910152606090737109709ecfa91a80626ff3989d68f67f5b1dd12d90156169ba565b511590565b616b2e57826020015115616a76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605860248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b6970566572696679536f757260648201527f6365436f646560206f7074696f6e206973206074727565600000000000000000608482015260a401615c1f565b8260c0015115616b2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605360248201527f54686520606c6963656e73655479706560206f7074696f6e2063616e6e6f742060448201527f62652075736564207768656e207468652060736b69704c6963656e736554797060648201527f6560206f7074696f6e2069732060747275656000000000000000000000000000608482015260a401615c1f565b6040805160ff8082526120008201909252600091816020015b6060815260200190600190039081616b4757905050905060006040518060400160405280600381526020017f6e70780000000000000000000000000000000000000000000000000000000000815250828280616ba29061b15b565b935060ff1681518110616bb757616bb761afee565b60200260200101819052506040518060400160405280600d81526020017f302e302e312d616c7068612e3700000000000000000000000000000000000000815250604051602001616c08919061b17a565b604051602081830303815290604052828280616c239061b15b565b935060ff1681518110616c3857616c3861afee565b60200260200101819052506040518060400160405280600681526020017f6465706c6f790000000000000000000000000000000000000000000000000000815250828280616c859061b15b565b935060ff1681518110616c9a57616c9a61afee565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e74726163744e616d65000000000000000000000000000000000000815250828280616ce79061b15b565b935060ff1681518110616cfc57616cfc61afee565b60200260200101819052508760200151828280616d189061b15b565b935060ff1681518110616d2d57616d2d61afee565b60200260200101819052506040518060400160405280600e81526020017f2d2d636f6e747261637450617468000000000000000000000000000000000000815250828280616d7a9061b15b565b935060ff1681518110616d8f57616d8f61afee565b602090810291909101015287518282616da78161b15b565b935060ff1681518110616dbc57616dbc61afee565b60200260200101819052506040518060400160405280600981526020017f2d2d636861696e49640000000000000000000000000000000000000000000000815250828280616e099061b15b565b935060ff1681518110616e1e57616e1e61afee565b6020026020010181905250616e32466184ad565b8282616e3d8161b15b565b935060ff1681518110616e5257616e5261afee565b60200260200101819052506040518060400160405280600f81526020017f2d2d6275696c64496e666f46696c650000000000000000000000000000000000815250828280616e9f9061b15b565b935060ff1681518110616eb457616eb461afee565b602002602001018190525086828280616ecc9061b15b565b935060ff1681518110616ee157616ee161afee565b60209081029190910101528551156170085760408051808201909152601581527f2d2d636f6e7374727563746f7242797465636f6465000000000000000000000060208201528282616f328161b15b565b935060ff1681518110616f4757616f4761afee565b60209081029190910101526040517f71aad10d0000000000000000000000000000000000000000000000000000000081526001600160a01b038416906371aad10d90616f9790899060040161a7f1565b600060405180830381865afa158015616fb4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052616fdc919081019061ac66565b8282616fe78161b15b565b935060ff1681518110616ffc57616ffc61afee565b60200260200101819052505b8460200151156170d85760408051808201909152601281527f2d2d766572696679536f75726365436f64650000000000000000000000000000602082015282826170518161b15b565b935060ff16815181106170665761706661afee565b60200260200101819052506040518060400160405280600581526020017f66616c73650000000000000000000000000000000000000000000000000000008152508282806170b39061b15b565b935060ff16815181106170c8576170c861afee565b602002602001018190525061729f565b6171106169b58660a0015160408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6171a35760408051808201909152600d81527f2d2d6c6963656e73655479706500000000000000000000000000000000000000602082015282826171538161b15b565b935060ff16815181106171685761716861afee565b60200260200101819052508460a00151604051602001617188919061b01d565b6040516020818303038152906040528282806170b39061b15b565b8460c001511580156171e65750604080890151815180830183526000808252602091820152825180840190935281518352908101908201526171e490511590565b155b1561729f5760408051808201909152600d81527f2d2d6c6963656e736554797065000000000000000000000000000000000000006020820152828261722a8161b15b565b935060ff168151811061723f5761723f61afee565b60200260200101819052506172538861854d565b604051602001617263919061b01d565b60405160208183030381529060405282828061727e9061b15b565b935060ff16815181106172935761729361afee565b60200260200101819052505b604080860151815180830183526000808252602091820152825180840190935281518352908101908201526172d390511590565b6173685760408051808201909152600b81527f2d2d72656c617965724964000000000000000000000000000000000000000000602082015282826173168161b15b565b935060ff168151811061732b5761732b61afee565b602002602001018190525084604001518282806173479061b15b565b935060ff168151811061735c5761735c61afee565b60200260200101819052505b6060850151156174895760408051808201909152600681527f2d2d73616c740000000000000000000000000000000000000000000000000000602082015282826173b18161b15b565b935060ff16815181106173c6576173c661afee565b602090810291909101015260608501516040517fb11a19e800000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b0384169063b11a19e890602401600060405180830381865afa158015617435573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261745d919081019061ac66565b82826174688161b15b565b935060ff168151811061747d5761747d61afee565b60200260200101819052505b60e085015151156175305760408051808201909152600a81527f2d2d6761734c696d697400000000000000000000000000000000000000000000602082015282826174d38161b15b565b935060ff16815181106174e8576174e861afee565b60200260200101819052506175048560e00151600001516184ad565b828261750f8161b15b565b935060ff16815181106175245761752461afee565b60200260200101819052505b60e085015160200151156175da5760408051808201909152600a81527f2d2d6761735072696365000000000000000000000000000000000000000000006020820152828261757d8161b15b565b935060ff16815181106175925761759261afee565b60200260200101819052506175ae8560e00151602001516184ad565b82826175b98161b15b565b935060ff16815181106175ce576175ce61afee565b60200260200101819052505b60e085015160400151156176845760408051808201909152600e81527f2d2d6d6178466565506572476173000000000000000000000000000000000000602082015282826176278161b15b565b935060ff168151811061763c5761763c61afee565b60200260200101819052506176588560e00151604001516184ad565b82826176638161b15b565b935060ff16815181106176785761767861afee565b60200260200101819052505b60e0850151606001511561772e5760408051808201909152601681527f2d2d6d61785072696f7269747946656550657247617300000000000000000000602082015282826176d18161b15b565b935060ff16815181106176e6576176e661afee565b60200260200101819052506177028560e00151606001516184ad565b828261770d8161b15b565b935060ff16815181106177225761772261afee565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561774c5761774c61a466565b60405190808252806020026020018201604052801561777f57816020015b606081526020019060019003908161776a5790505b50905060005b8260ff168160ff1610156177d857838160ff16815181106177a8576177a861afee565b6020026020010151828260ff16815181106177c5576177c561afee565b6020908102919091010152600101617785565b5093505050505b949350505050565b61780e6040518060600160405280600060030b815260200160608152602001606081525090565b60408051808201825260048082527f6261736800000000000000000000000000000000000000000000000000000000602083015291517fd145736c000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d92600091849163d145736c916178949186910161b1e5565b600060405180830381865afa1580156178b1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526178d9919081019061ac66565b905060006178e7868361903c565b90506000846001600160a01b031663f45c1ce7836040518263ffffffff1660e01b8152600401617917919061a358565b6000604051808303816000875af1158015617936573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261795e919081019061b22c565b805190915060030b158015906179775750602081015151155b80156179865750604081015151155b15616960578160008151811061799e5761799e61afee565b6020026020010151604051602001615bdf919061b2e2565b606060006179eb8560408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528651825280870190820152909150617a229082905b90619191565b15617b7f576000617a9f82617a9984617a93617a658a60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b6040805180820182526000808252602091820152815180830190925282518252918201519181019190915290565b906191b8565b9061921a565b604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617b03908290619191565b15617b6d57604080518082018252600181527f0a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617b6a905b829061929f565b90505b617b76816192c5565b925050506159f3565b8215617b98578484604051602001615bdf92919061b4ce565b50506040805160208101909152600081526159f3565b509392505050565b6000808251602084016000f09392505050565b6161db82826001617ce1565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fad3cb1cc00000000000000000000000000000000000000000000000000000000179052905160609160009182916001600160a01b03861691617c4a919061b575565b600060405180830381855afa9150503d8060008114617c85576040519150601f19603f3d011682016040523d82523d6000602084013e617c8a565b606091505b5091509150818015617c9d575060208151115b15617cb657808060200190518101906177df919061ac66565b505060408051602081019091526000815292915050565b6000617cd9838361932e565b159392505050565b8160a0015115617cf057505050565b6000617cfd848484619409565b90506000617d0a826177e7565b602081015181519192509060030b158015617da65750604080518082018252600781527f535543434553530000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617da690604080518082018252600080825260209182015281518083019092528451825280850190820152617a1c565b15617db357505050505050565b60408201515115617dd3578160400151604051602001615bdf919061b591565b80604051602001615bdf919061b5ef565b60606000617e198360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c0000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152909150617e7e905b829061844c565b15617eed57604080518082018252600481527f2e736f6c00000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159f390617ee89083906199a4565b6192c5565b604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617f4f905b8290619a2e565b60010361801c57604080518082018252600181527f3a0000000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152617fb590617b63565b50604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159f390617ee8905b839061929f565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261807b90617e77565b156181b257604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906180e3908390619ac8565b9050600081600183516180f6919061b65a565b815181106181065761810661afee565b602002602001015190506181a9617ee861817c6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600080825260209182015281518083019092528551825280860190820152906199a4565b95945050505050565b82604051602001615bdf919061b66d565b50919050565b606060006181fe8360408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b604080518082018252600481527f2e736f6c000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015290915061826090617e77565b1561826e576159f3816192c5565b604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526182cd90617f48565b60010361833757604080518082018252600181527f3a00000000000000000000000000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526159f390617ee890618015565b604080518082018252600581527f2e6a736f6e0000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261839690617e77565b156181b257604080518082018252600181527f2f000000000000000000000000000000000000000000000000000000000000006020808301918252835180850185526000808252908201819052845180860190955292518452830152906183fe908390619ac8565b905060018151111561843a578060028251618419919061b65a565b815181106184295761842961afee565b602002602001015192505050919050565b5082604051602001615bdf919061b66d565b805182516000911115618461575060006158e5565b815183516020850151600092916184779161a61c565b618481919061b65a565b9050826020015181036184985760019150506158e5565b82516020840151819020912014905092915050565b606060006184ba83619b6d565b600101905060008167ffffffffffffffff8111156184da576184da61a466565b6040519080825280601f01601f191660200182016040528015618504576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461850e57509392505050565b604081810151815180830183526000808252602091820181905283518085018552835181529282018383015283518085018552600a81527f554e4c4943454e53454400000000000000000000000000000000000000000000818401908152855180870187528381528401929092528451808601909552518452908301526060916185d9905b8290617ccd565b1561861957505060408051808201909152600481527f4e6f6e65000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600981527f556e6c6963656e7365000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618678906185d2565b156186b857505060408051808201909152600981527f556e6c6963656e736500000000000000000000000000000000000000000000006020820152919050565b604080518082018252600381527f4d4954000000000000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618717906185d2565b1561875757505060408051808201909152600381527f4d495400000000000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d322e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526187b6906185d2565b8061881b5750604080518082018252601081527f47504c2d322e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261881b906185d2565b1561885b57505060408051808201909152600981527f474e552047504c763200000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f47504c2d332e302d6f6e6c790000000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526188ba906185d2565b8061891f5750604080518082018252601081527f47504c2d332e302d6f722d6c61746572000000000000000000000000000000006020808301918252835180850185526000808252908201528351808501909452915183529082015261891f906185d2565b1561895f57505060408051808201909152600981527f474e552047504c763300000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d322e312d6f6e6c7900000000000000000000000000000000000000602080830191825283518085018552600080825290820152835180850190945291518352908201526189be906185d2565b80618a235750604080518082018252601181527f4c47504c2d322e312d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618a23906185d2565b15618a6357505060408051808201909152600c81527f474e55204c47504c76322e3100000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4c47504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ac2906185d2565b80618b275750604080518082018252601181527f4c47504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618b27906185d2565b15618b6757505060408051808201909152600a81527f474e55204c47504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d322d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618bc6906185d2565b15618c0657505060408051808201909152600c81527f4253442d322d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600c81527f4253442d332d436c61757365000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618c65906185d2565b15618ca557505060408051808201909152600c81527f4253442d332d436c6175736500000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4d504c2d322e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618d04906185d2565b15618d4457505060408051808201909152600781527f4d504c2d322e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600781527f4f534c2d332e300000000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618da3906185d2565b15618de357505060408051808201909152600781527f4f534c2d332e30000000000000000000000000000000000000000000000000006020820152919050565b604080518082018252600a81527f4170616368652d322e300000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618e42906185d2565b15618e8257505060408051808201909152600a81527f4170616368652d322e30000000000000000000000000000000000000000000006020820152919050565b604080518082018252600d81527f4147504c2d332e302d6f6e6c790000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618ee1906185d2565b80618f465750604080518082018252601181527f4147504c2d332e302d6f722d6c6174657200000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618f46906185d2565b15618f8657505060408051808201909152600a81527f474e55204147504c7633000000000000000000000000000000000000000000006020820152919050565b604080518082018252600881527f4255534c2d312e3100000000000000000000000000000000000000000000000060208083019182528351808501855260008082529082015283518085019094529151835290820152618fe5906185d2565b1561902557505060408051808201909152600781527f42534c20312e31000000000000000000000000000000000000000000000000006020820152919050565b60408084015184519151615bdf929060200161b74b565b60608060005b84518110156190c7578185828151811061905e5761905e61afee565b602002602001015160405160200161907792919061ab14565b604051602081830303815290604052915060018551619096919061b65a565b81146190bf57816040516020016190ad919061b8b4565b60405160208183030381529060405291505b600101619042565b5060408051600380825260808201909252600091816020015b60608152602001906001900390816190e0579050509050838160008151811061910b5761910b61afee565b60200260200101819052506040518060400160405280600281526020017f2d630000000000000000000000000000000000000000000000000000000000008152508160018151811061915f5761915f61afee565b6020026020010181905250818160028151811061917e5761917e61afee565b6020908102919091010152949350505050565b60208083015183518351928401516000936191af9291849190619c4f565b14159392505050565b604080518082019091526000808252602082015260006191ea8460000151856020015185600001518660200151619d60565b90508360200151816191fc919061b65a565b8451859061920b90839061b65a565b90525060208401525090919050565b604080518082019091526000808252602082015281518351101561923f5750816158e5565b60208083015190840151600191146192665750815160208481015190840151829020919020145b80156192975782518451859061927d90839061b65a565b905250825160208501805161929390839061a61c565b9052505b509192915050565b60408051808201909152600080825260208201526192be838383619e80565b5092915050565b60606000826000015167ffffffffffffffff8111156192e6576192e661a466565b6040519080825280601f01601f191660200182016040528015619310576020820181803683370190505b50905060006020820190506192be8185602001518660000151619f2b565b8151815160009190811115619341575081515b6020808501519084015160005b838110156193fa57825182518082146193ca5760001960208710156193a95760018461937b89602061b65a565b619385919061a61c565b61939090600861b8f5565b61939b90600261b9f3565b6193a5919061b65a565b1990505b81811683821681810391146193c75797506158e59650505050505050565b50505b6193d560208661a61c565b94506193e260208561a61c565b935050506020816193f3919061a61c565b905061934e565b5084518651616960919061b9ff565b606060006194156161df565b6040805160ff808252612000820190925291925060009190816020015b606081526020019060019003908161943257905050905060006040518060400160405280600381526020017f6e7078000000000000000000000000000000000000000000000000000000000081525082828061948d9061b15b565b935060ff16815181106194a2576194a261afee565b60200260200101819052506040518060400160405280600781526020017f5e312e33322e33000000000000000000000000000000000000000000000000008152506040516020016194f3919061ba1f565b60405160208183030381529060405282828061950e9061b15b565b935060ff16815181106195235761952361afee565b60200260200101819052506040518060400160405280600881526020017f76616c69646174650000000000000000000000000000000000000000000000008152508282806195709061b15b565b935060ff16815181106195855761958561afee565b6020026020010181905250826040516020016195a1919061b089565b6040516020818303038152906040528282806195bc9061b15b565b935060ff16815181106195d1576195d161afee565b60200260200101819052506040518060400160405280600a81526020017f2d2d636f6e74726163740000000000000000000000000000000000000000000081525082828061961e9061b15b565b935060ff16815181106196335761963361afee565b60200260200101819052506196488784619fa5565b82826196538161b15b565b935060ff16815181106196685761966861afee565b6020908102919091010152855151156197145760408051808201909152600b81527f2d2d7265666572656e6365000000000000000000000000000000000000000000602082015282826196ba8161b15b565b935060ff16815181106196cf576196cf61afee565b60200260200101819052506196e8866000015184619fa5565b82826196f38161b15b565b935060ff16815181106197085761970861afee565b60200260200101819052505b8560800151156197825760408051808201909152601881527f2d2d756e73616665536b697053746f72616765436865636b00000000000000006020820152828261975d8161b15b565b935060ff16815181106197725761977261afee565b60200260200101819052506197e8565b84156197e85760408051808201909152601281527f2d2d726571756972655265666572656e63650000000000000000000000000000602082015282826197c78161b15b565b935060ff16815181106197dc576197dc61afee565b60200260200101819052505b604086015151156198845760408051808201909152600d81527f2d2d756e73616665416c6c6f7700000000000000000000000000000000000000602082015282826198328161b15b565b935060ff16815181106198475761984761afee565b602002602001018190525085604001518282806198639061b15b565b935060ff16815181106198785761987861afee565b60200260200101819052505b8560600151156198ee5760408051808201909152601481527f2d2d756e73616665416c6c6f7752656e616d6573000000000000000000000000602082015282826198cd8161b15b565b935060ff16815181106198e2576198e261afee565b60200260200101819052505b60008160ff1667ffffffffffffffff81111561990c5761990c61a466565b60405190808252806020026020018201604052801561993f57816020015b606081526020019060019003908161992a5790505b50905060005b8260ff168160ff16101561999857838160ff16815181106199685761996861afee565b6020026020010151828260ff16815181106199855761998561afee565b6020908102919091010152600101619945565b50979650505050505050565b60408051808201909152600080825260208201528151835110156199c95750816158e5565b815183516020850151600092916199df9161a61c565b6199e9919061b65a565b60208401519091506001908214619a0a575082516020840151819020908220145b8015619a2557835185518690619a2190839061b65a565b9052505b50929392505050565b6000808260000151619a528560000151866020015186600001518760200151619d60565b619a5c919061a61c565b90505b83516020850151619a70919061a61c565b81116192be5781619a808161ba64565b9250508260000151619ab7856020015183619a9b919061b65a565b8651619aa7919061b65a565b8386600001518760200151619d60565b619ac1919061a61c565b9050619a5f565b60606000619ad68484619a2e565b619ae190600161a61c565b67ffffffffffffffff811115619af957619af961a466565b604051908082528060200260200182016040528015619b2c57816020015b6060815260200190600190039081619b175790505b50905060005b8151811015617bae57619b48617ee8868661929f565b828281518110619b5a57619b5a61afee565b6020908102919091010152600101619b32565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310619bb6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310619be2576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310619c0057662386f26fc10000830492506010015b6305f5e1008310619c18576305f5e100830492506008015b6127108310619c2c57612710830492506004015b60648310619c3e576064830492506002015b600a83106158e55760010192915050565b600080858411619d565760208411619d025760008415619c9a576001619c7686602061b65a565b619c8190600861b8f5565b619c8c90600261b9f3565b619c96919061b65a565b1990505b8351811685619ca9898961a61c565b619cb3919061b65a565b805190935082165b818114619ced57878411619cd557879450505050506177df565b83619cdf8161ba7e565b945050828451169050619cbb565b619cf7878561a61c565b9450505050506177df565b838320619d0f858861b65a565b619d19908761a61c565b91505b858210619d5457848220808203619d4157619d37868461a61c565b93505050506177df565b619d4c60018461b65a565b925050619d1c565b505b5092949350505050565b60008381868511619e6b5760208511619e1a5760008515619dac576001619d8887602061b65a565b619d9390600861b8f5565b619d9e90600261b9f3565b619da8919061b65a565b1990505b84518116600087619dbd8b8b61a61c565b619dc7919061b65a565b855190915083165b828114619e0c57818610619df457619de78b8b61a61c565b96505050505050506177df565b85619dfe8161ba64565b965050838651169050619dcf565b8596505050505050506177df565b508383206000905b619e2c868961b65a565b8211619e6957858320808203619e4857839450505050506177df565b619e5360018561a61c565b9350508180619e619061ba64565b925050619e22565b505b619e75878761a61c565b979650505050505050565b60408051808201909152600080825260208201526000619eb28560000151866020015186600001518760200151619d60565b602080870180519186019190915251909150619ece908261b65a565b835284516020860151619ee1919061a61c565b8103619ef05760008552619f22565b83518351619efe919061a61c565b85518690619f0d90839061b65a565b9052508351619f1c908261a61c565b60208601525b50909392505050565b60208110619f635781518352619f4260208461a61c565b9250619f4f60208361a61c565b9150619f5c60208261b65a565b9050619f2b565b6000198115619f92576001619f7983602061b65a565b619f859061010061b9f3565b619f8f919061b65a565b90505b9151835183169219169190911790915250565b60606000619fb384846162b2565b8051602080830151604051939450619fcd9390910161ba95565b60405160208183030381529060405291505092915050565b6112a68061baee83390190565b610f2a8061cd9483390190565b6040518060e0016040528060608152602001606081526020016060815260200160001515815260200160001515815260200160001515815260200161a04261a047565b905290565b6040518061010001604052806000151581526020016000151581526020016060815260200160008019168152602001606081526020016060815260200160001515815260200161a0426040518060800160405280600081526020016000815260200160008152602001600081525090565b602080825282518282018190526000918401906040840190835b8181101561a0f95783516001600160a01b031683526020938401939092019160010161a0d2565b509095945050505050565b60005b8381101561a11f57818101518382015260200161a107565b50506000910152565b6000815180845261a14081602086016020860161a104565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a250577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b8181101561a236577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301835261a22084865161a128565b602095860195909450929092019160010161a1e6565b50919750505060209485019492909201915060010161a17c565b50929695505050505050565b600081518084526020840193506020830160005b8281101561a2b05781517fffffffff000000000000000000000000000000000000000000000000000000001686526020958601959091019060010161a270565b5093949350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a250577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180516040875261a326604088018261a128565b905060208201519150868103602088015261a341818361a25c565b96505050602093840193919091019060010161a2e2565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a250577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845261a3ba85835161a128565b9450602093840193919091019060010161a380565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561a250577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087860301845281516001600160a01b038151168652602081015190506040602087015261a450604087018261a25c565b955050602093840193919091019060010161a3f7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600181811c9082168061a4a957607f821691505b6020821081036181c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f82111561a52957806000526020600020601f840160051c8101602085101561a5095750805b601f840160051c820191505b8181101561222b576000815560010161a515565b505050565b815167ffffffffffffffff81111561a5485761a54861a466565b61a55c8161a556845461a495565b8461a4e2565b6020601f82116001811461a590576000831561a5785750848201515b600019600385901b1c1916600184901b17845561222b565b600084815260208120601f198516915b8281101561a5c0578785015182556020948501946001909201910161a5a0565b508482101561a5de5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156158e5576158e561a5ed565b6001600160a01b0381541682526001600160a01b03600182015416602083015260028101546040830152600060038201608060608501526000815461a6738161a495565b806080880152600182166000811461a692576001811461a6cc5761a700565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00831660a089015260a082151560051b890101935061a700565b84600052602060002060005b8381101561a6f75781548a820160a0015260019091019060200161a6d8565b890160a0019450505b50919695505050505050565b6001600160a01b038516815283602082015260a06040820152600061a73460a083018561a128565b600060608401528281036080840152619e75818561a62f565b60006020828403121561a75f57600080fd5b5051919050565b6001600160a01b03841681528260208201526060604082015260006181a9606083018461a128565b8281526040602082015260006177df604083018461a128565b6001600160a01b0386541681526001600160a01b038516602082015283604082015260a06060820152600061a7df60a083018561a128565b90508260808301529695505050505050565b6020815260006159f3602083018461a128565b6001600160a01b038616815284602082015260a06040820152600061a82c60a083018661a128565b846060840152828103608084015261a844818561a62f565b98975050505050505050565b6001600160a01b03831681526040602082015260006177df604083018461a128565b6001600160a01b0385541681526001600160a01b038416602082015282604082015260a06060820152600061a8aa60a083018461a128565b90506000608083015295945050505050565b6001600160a01b0386511681526001600160a01b038516602082015283604082015260a06060820152600061a7df60a083018561a128565b60008261a92a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6001600160a01b03831681526040602082015260006177df604083018461a62f565b83815260606020820152600061a96a606083018561a128565b8281036040840152616960818561a62f565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161a9b481601a85016020880161a104565b7f3a20000000000000000000000000000000000000000000000000000000000000601a91840191820152835161a9f181601c84016020880161a104565b01601c01949350505050565b60006020828403121561aa0f57600080fd5b81516001600160a01b03811681146159f357600080fd5b6040516060810167ffffffffffffffff8111828210171561aa495761aa4961a466565b60405290565b60008067ffffffffffffffff84111561aa6a5761aa6a61a466565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff8211171561aa995761aa9961a466565b60405283815290508082840185101561aab157600080fd5b617bae84602083018561a104565b600082601f83011261aad057600080fd5b6159f38383516020850161aa4f565b60006020828403121561aaf157600080fd5b815167ffffffffffffffff81111561ab0857600080fd5b6158e18482850161aabf565b6000835161ab2681846020880161a104565b83519083019061ab3a81836020880161a104565b01949350505050565b7f4661696c656420746f206465706c6f7920636f6e74726163742000000000000081526000835161ab7b81601a85016020880161a104565b7f207573696e6720636f6e7374727563746f722064617461202200000000000000601a91840191820152835161abb881603384016020880161a104565b7f220000000000000000000000000000000000000000000000000000000000000060339290910191820152603401949350505050565b6001600160a01b03841681526001600160a01b03831660208201526060604082015260006181a9606083018461a128565b60408152600b60408201527f464f554e4452595f4f555400000000000000000000000000000000000000000060608201526080602082015260006159f3608083018461a128565b60006020828403121561ac7857600080fd5b815167ffffffffffffffff81111561ac8f57600080fd5b8201601f8101841361aca057600080fd5b6158e18482516020840161aa4f565b6000855161acc1818460208a0161a104565b7f2f00000000000000000000000000000000000000000000000000000000000000908301908152855161acfb816001840160208a0161a104565b7f2f0000000000000000000000000000000000000000000000000000000000000060019290910191820152845161ad3981600284016020890161a104565b6001818301019150507f2f000000000000000000000000000000000000000000000000000000000000006001820152835161ad7b81600284016020880161a104565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600292909101918201526007019695505050505050565b60408152600061adc6604083018461a128565b8281036020840152600481527f2e6173740000000000000000000000000000000000000000000000000000000060208201526040810191505092915050565b60006020828403121561ae1757600080fd5b815180151581146159f357600080fd5b7f436f756c64206e6f742066696e642041535420696e206172746966616374200081526000825161ae5f81601f85016020870161a104565b7f2e205365742060617374203d20747275656020696e20666f756e6472792e746f601f9390910192830152507f6d6c000000000000000000000000000000000000000000000000000000000000603f820152604101919050565b60408152600061aecc604083018461a128565b8281036020840152601181527f2e6173742e6162736f6c7574655061746800000000000000000000000000000060208201526040810191505092915050565b60408152600061af1e604083018461a128565b8281036020840152600c81527f2e6173742e6c6963656e7365000000000000000000000000000000000000000060208201526040810191505092915050565b7f2e6d657461646174612e736f75726365732e5b2700000000000000000000000081526000825161af9581601485016020870161a104565b7f275d2e6b656363616b32353600000000000000000000000000000000000000006014939091019283015250602001919050565b60408152600061afdc604083018561a128565b82810360208401526159ef818561a128565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f220000000000000000000000000000000000000000000000000000000000000081526000825161b05581600185016020870161a104565b7f22000000000000000000000000000000000000000000000000000000000000006001939091019283015250600201919050565b6000825161b09b81846020870161a104565b7f2f6275696c642d696e666f000000000000000000000000000000000000000000920191825250600b01919050565b7f436f756c64206e6f742066696e64206275696c642d696e666f2066696c65207781527f697468206d61746368696e6720736f7572636520636f6465206861736820666f60208201527f7220636f6e74726163742000000000000000000000000000000000000000000060408201526000825161b14e81604b85016020870161a104565b91909101604b0192915050565b600060ff821660ff810361b1715761b17161a5ed565b60010192915050565b7f406f70656e7a657070656c696e2f646566656e6465722d6465706c6f792d636c81527f69656e742d636c6940000000000000000000000000000000000000000000000060208201526000825161b1d881602985016020870161a104565b9190910160290192915050565b60408152601660408201527f4f50454e5a455050454c494e5f424153485f504154480000000000000000000060608201526080602082015260006159f3608083018461a128565b60006020828403121561b23e57600080fd5b815167ffffffffffffffff81111561b25557600080fd5b82016060818503121561b26757600080fd5b61b26f61aa26565b81518060030b811461b28057600080fd5b8152602082015167ffffffffffffffff81111561b29c57600080fd5b61b2a88682850161aabf565b602083015250604082015167ffffffffffffffff81111561b2c857600080fd5b61b2d48682850161aabf565b604083015250949350505050565b7f4661696c656420746f2072756e206261736820636f6d6d616e6420776974682081527f220000000000000000000000000000000000000000000000000000000000000060208201526000825161b34081602185016020870161a104565b7f222e20496620796f7520617265207573696e672057696e646f77732c2073657460219390910192830152507f20746865204f50454e5a455050454c494e5f424153485f5041544820656e766960418201527f726f6e6d656e74207661726961626c6520746f207468652066756c6c7920717560618201527f616c69666965642070617468206f66207468652062617368206578656375746160818201527f626c652e20466f72206578616d706c652c20696620796f75206172652075736960a18201527f6e672047697420666f722057696e646f77732c206164642074686520666f6c6c60c18201527f6f77696e67206c696e6520696e20746865202e656e762066696c65206f66207960e18201527f6f75722070726f6a65637420287573696e6720666f727761726420736c6173686101018201527f6573293a0a4f50454e5a455050454c494e5f424153485f504154483d22433a2f6101218201527f50726f6772616d2046696c65732f4769742f62696e2f6261736822000000000061014182015261015c01919050565b7f4661696c656420746f2066696e64206c696e652077697468207072656669782081527f270000000000000000000000000000000000000000000000000000000000000060208201526000835161b52c81602185016020880161a104565b7f2720696e206f75747075743a2000000000000000000000000000000000000000602191840191820152835161b56981602e84016020880161a104565b01602e01949350505050565b6000825161b58781846020870161a104565b9190910192915050565b7f4661696c656420746f2072756e2075706772616465207361666574792076616c81527f69646174696f6e3a20000000000000000000000000000000000000000000000060208201526000825161b1d881602985016020870161a104565b7f55706772616465207361666574792076616c69646174696f6e206661696c656481527f3a0a00000000000000000000000000000000000000000000000000000000000060208201526000825161b64d81602285016020870161a104565b9190910160220192915050565b818103818111156158e5576158e561a5ed565b7f436f6e7472616374206e616d652000000000000000000000000000000000000081526000825161b6a581600e85016020870161a104565b7f206d75737420626520696e2074686520666f726d6174204d79436f6e74726163600e9390910192830152507f742e736f6c3a4d79436f6e7472616374206f72204d79436f6e74726163742e73602e8201527f6f6c206f72206f75742f4d79436f6e74726163742e736f6c2f4d79436f6e7472604e8201527f6163742e6a736f6e000000000000000000000000000000000000000000000000606e820152607601919050565b7f53504458206c6963656e7365206964656e74696669657220000000000000000081526000835161b78381601885016020880161a104565b7f20696e2000000000000000000000000000000000000000000000000000000000601891840191820152835161b7c081601c84016020880161a104565b7f20646f6573206e6f74206c6f6f6b206c696b65206120737570706f7274656420601c92909101918201527f6c6963656e736520666f7220626c6f636b206578706c6f726572207665726966603c8201527f69636174696f6e2e205573652074686520606c6963656e73655479706560206f605c8201527f7074696f6e20746f20737065636966792061206c6963656e736520747970652c607c8201527f206f7220736574207468652060736b69704c6963656e73655479706560206f70609c8201527f74696f6e20746f2060747275656020746f20736b69702e00000000000000000060bc82015260d301949350505050565b6000825161b8c681846020870161a104565b7f2000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b80820281158282048414176158e5576158e561a5ed565b6001815b600184111561b9475780850481111561b92b5761b92b61a5ed565b600184161561b93957908102905b60019390931c92800261b910565b935093915050565b60008261b95e575060016158e5565b8161b96b575060006158e5565b816001811461b981576002811461b98b5761b9a7565b60019150506158e5565b60ff84111561b99c5761b99c61a5ed565b50506001821b6158e5565b5060208310610133831016604e8410600b841016171561b9ca575081810a6158e5565b61b9d7600019848461b90c565b806000190482111561b9eb5761b9eb61a5ed565b029392505050565b60006159f3838361b94f565b81810360008312801583831316838312821617156192be576192be61a5ed565b7f406f70656e7a657070656c696e2f75706772616465732d636f7265400000000081526000825161ba5781601c85016020870161a104565b91909101601c0192915050565b6000600019820361ba775761ba7761a5ed565b5060010190565b60008161ba8d5761ba8d61a5ed565b506000190190565b6000835161baa781846020880161a104565b7f3a00000000000000000000000000000000000000000000000000000000000000908301908152835161bae181600184016020880161a104565b0160010194935050505056fe608060405234801561001057600080fd5b506040516112a63803806112a683398101604081905261002f91610110565b604051806040016040528060048152602001635a65746160e01b815250604051806040016040528060048152602001635a45544160e01b815250816003908161007891906101e2565b50600461008582826101e2565b5050506001600160a01b03821615806100a557506001600160a01b038116155b156100c35760405163e6c4247b60e01b815260040160405180910390fd5b600680546001600160a01b039384166001600160a01b031991821617909155600780549290931691161790556102a0565b80516001600160a01b038116811461010b57600080fd5b919050565b6000806040838503121561012357600080fd5b61012c836100f4565b915061013a602084016100f4565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061016d57607f821691505b60208210810361018d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156101dd57806000526020600020601f840160051c810160208510156101ba5750805b601f840160051c820191505b818110156101da57600081556001016101c6565b50505b505050565b81516001600160401b038111156101fb576101fb610143565b61020f816102098454610159565b84610193565b6020601f821160018114610243576000831561022b5750848201515b600019600385901b1c1916600184901b1784556101da565b600084815260208120601f198516915b828110156102735787850151825560209485019460019092019101610253565b50848210156102915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b610ff7806102af6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806342966c68116100b257806379cc679011610081578063a9059cbb11610066578063a9059cbb1461028e578063bff9662a146102a1578063dd62ed3e146102c157600080fd5b806379cc67901461027357806395d89b411461028657600080fd5b806342966c68146102025780635b1125911461021557806370a0823114610235578063779e3b631461026b57600080fd5b80631e458bee116100ee5780631e458bee1461018857806323b872dd1461019b578063313ce567146101ae578063328a01d0146101bd57600080fd5b806306fdde0314610120578063095ea7b31461013e57806315d57fd41461016157806318160ddd14610176575b600080fd5b610128610307565b6040516101359190610d97565b60405180910390f35b61015161014c366004610e2c565b610399565b6040519015158152602001610135565b61017461016f366004610e56565b6103b3565b005b6002545b604051908152602001610135565b610174610196366004610e89565b61057e565b6101516101a9366004610ebc565b610631565b60405160128152602001610135565b6007546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b610174610210366004610ef9565b610655565b6006546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a610243366004610f12565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610174610662565b610174610281366004610e2c565b610786565b610128610837565b61015161029c366004610e2c565b610846565b6005546101dd9073ffffffffffffffffffffffffffffffffffffffff1681565b61017a6102cf366004610e56565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60606003805461031690610f34565b80601f016020809104026020016040519081016040528092919081815260200182805461034290610f34565b801561038f5780601f106103645761010080835404028352916020019161038f565b820191906000526020600020905b81548152906001019060200180831161037257829003601f168201915b5050505050905090565b6000336103a7818585610854565b60019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1633148015906103f3575060065473ffffffffffffffffffffffffffffffffffffffff163314155b15610431576040517fcdfcef970000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580610468575073ffffffffffffffffffffffffffffffffffffffff8116155b1561049f576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006805473ffffffffffffffffffffffffffffffffffffffff8481167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316811790935560058054918516919092161790556040805133815260208101929092527fe79965b5c67dcfb2cf5fe152715e4a7256cee62a3d5dd8484fd8a8539eb8beff910160405180910390a16040805133815273ffffffffffffffffffffffffffffffffffffffff831660208201527f1b9352454524a57a51f24f67dc66d898f616922cd1f7a12d73570ece12b1975c910160405180910390a15050565b60055473ffffffffffffffffffffffffffffffffffffffff1633146105d1576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6105db8383610866565b808373ffffffffffffffffffffffffffffffffffffffff167fc263b302aec62d29105026245f19e16f8e0137066ccd4a8bd941f716bd4096bb8460405161062491815260200190565b60405180910390a3505050565b60003361063f8582856108c6565b61064a858585610995565b506001949350505050565b61065f3382610a40565b50565b60075473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517fe700765e000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b60065473ffffffffffffffffffffffffffffffffffffffff16610704576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691821790556040805133815260208101929092527f5104c9abdc7d111c2aeb4ce890ac70274a4be2ee83f46a62551be5e6ebc82dd0910160405180910390a1565b60055473ffffffffffffffffffffffffffffffffffffffff1633146107d9576040517f3fe32fba000000000000000000000000000000000000000000000000000000008152336004820152602401610428565b6107e38282610a9c565b8173ffffffffffffffffffffffffffffffffffffffff167f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b18260405161082b91815260200190565b60405180910390a25050565b60606004805461031690610f34565b6000336103a7818585610995565b6108618383836001610ab1565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166108b6576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c260008383610bf9565b5050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461098f5781811015610980576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610428565b61098f84848484036000610ab1565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166109e5576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8216610a35576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b610861838383610bf9565b73ffffffffffffffffffffffffffffffffffffffff8216610a90576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b6108c282600083610bf9565b610aa78233836108c6565b6108c28282610a40565b73ffffffffffffffffffffffffffffffffffffffff8416610b01576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8316610b51576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610428565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561098f578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610beb91815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c31578060026000828254610c269190610f87565b90915550610ce39050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610cb7576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610428565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610d0c57600280548290039055610d38565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161062491815260200190565b602081526000825180602084015260005b81811015610dc55760208186018101516040868401015201610da8565b5060006040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610e2757600080fd5b919050565b60008060408385031215610e3f57600080fd5b610e4883610e03565b946020939093013593505050565b60008060408385031215610e6957600080fd5b610e7283610e03565b9150610e8060208401610e03565b90509250929050565b600080600060608486031215610e9e57600080fd5b610ea784610e03565b95602085013595506040909401359392505050565b600080600060608486031215610ed157600080fd5b610eda84610e03565b9250610ee860208501610e03565b929592945050506040919091013590565b600060208284031215610f0b57600080fd5b5035919050565b600060208284031215610f2457600080fd5b610f2d82610e03565b9392505050565b600181811c90821680610f4857607f821691505b602082108103610f81577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b808201808211156103ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea264697066735822122001ec0ce060384773f3d3389fab7bed652c6b8ee389a7471cce10d00d87a75a0c64736f6c634300081a00336080604052348015600f57600080fd5b506001600055610f06806100246000396000f3fe60806040526004361061006e5760003560e01c8063c51316911161004b578063c5131691146100d5578063c9028a36146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a214610077578063676cc054146100975780636ed70169146100c057005b3661007557005b005b34801561008357600080fd5b50610075610092366004610709565b610148565b6100aa6100a5366004610745565b6101de565b6040516100b79190610840565b60405180910390f35b3480156100cc57600080fd5b5061007561023f565b3480156100e157600080fd5b506100756100f0366004610709565b610274565b34801561010157600080fd5b50610075610110366004610853565b61034f565b6100756101233660046109b3565b61038b565b34801561013457600080fd5b50610075610143366004610a9f565b6103cf565b610150610404565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610447565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b60607fd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a35250161020e6020860186610b89565b848460405161021f93929190610bed565b60405180910390a1506040805160208101909152600081525b9392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61027c610404565b6000610289600285610c26565b9050806000036102c5576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102e773ffffffffffffffffffffffffffffffffffffffff8416338484610447565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f689a5a5cb55e795ffe4cd8b419cd3bb0a3373974c54d25f64e734d7388b93e9b3382604051610380929190610c61565b60405180910390a150565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa33348585856040516103c2959493929190610d53565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103c29493929190610ddd565b600260005403610440576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104dc9085906104e2565b50505050565b600061050473ffffffffffffffffffffffffffffffffffffffff84168361057d565b905080516000141580156105295750808060200190518101906105279190610e97565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061023883836000846000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105b09190610eb4565b60006040518083038185875af1925050503d80600081146105ed576040519150601f19603f3d011682016040523d82523d6000602084013e6105f2565b606091505b509150915061060286838361060c565b9695505050505050565b6060826106215761061c8261069b565b610238565b8151158015610645575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610694576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610574565b5080610238565b8051156106ab5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461070457600080fd5b919050565b60008060006060848603121561071e57600080fd5b8335925061072e602085016106e0565b915061073c604085016106e0565b90509250925092565b6000806000838503604081121561075b57600080fd5b602081121561076957600080fd5b50839250602084013567ffffffffffffffff81111561078757600080fd5b8401601f8101861361079857600080fd5b803567ffffffffffffffff8111156107af57600080fd5b8660208284010111156107c157600080fd5b939660209190910195509293505050565b60005b838110156107ed5781810151838201526020016107d5565b50506000910152565b6000815180845261080e8160208601602086016107d2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061023860208301846107f6565b60006020828403121561086557600080fd5b813567ffffffffffffffff81111561087c57600080fd5b82016080818503121561023857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156109045761090461088e565b604052919050565b600082601f83011261091d57600080fd5b813567ffffffffffffffff8111156109375761093761088e565b61096860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108bd565b81815284602083860101111561097d57600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106dd57600080fd5b80356107048161099a565b6000806000606084860312156109c857600080fd5b833567ffffffffffffffff8111156109df57600080fd5b6109eb8682870161090c565b935050602084013591506040840135610a038161099a565b809150509250925092565b600067ffffffffffffffff821115610a2857610a2861088e565b5060051b60200190565b600082601f830112610a4357600080fd5b8135610a56610a5182610a0e565b6108bd565b8082825260208201915060208360051b860101925085831115610a7857600080fd5b602085015b83811015610a95578035835260209283019201610a7d565b5095945050505050565b600080600060608486031215610ab457600080fd5b833567ffffffffffffffff811115610acb57600080fd5b8401601f81018613610adc57600080fd5b8035610aea610a5182610a0e565b8082825260208201915060208360051b850101925088831115610b0c57600080fd5b602084015b83811015610b4e57803567ffffffffffffffff811115610b3057600080fd5b610b3f8b60208389010161090c565b84525060209283019201610b11565b509550505050602084013567ffffffffffffffff811115610b6e57600080fd5b610b7a86828701610a32565b92505061073c604085016109a8565b600060208284031215610b9b57600080fd5b610238826106e0565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff84168152604060208201526000610c1d604083018486610ba4565b95945050505050565b600082610c5c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c9f836106e0565b16604082015273ffffffffffffffffffffffffffffffffffffffff610cc6602084016106e0565b166060820152600080604084013590508060808401525060608301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610d1257600080fd5b830160208101903567ffffffffffffffff811115610d2f57600080fd5b803603821315610d3e57600080fd5b608060a085015261060260c085018284610ba4565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d8860a08301866107f6565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610dd3578151865260209586019590910190600101610db5565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e70577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e5b8583516107f6565b94506020938401939190910190600101610e21565b505050508281036040840152610e868186610da1565b915050610c1d606083018415159052565b600060208284031215610ea957600080fd5b81516102388161099a565b60008251610ec68184602087016107d2565b919091019291505056fea2646970667358221220a40191c0a0256363e6edb7673accb387b7a3597d9a76c64faccadc4ce57c234664736f6c634300081a00335a657461436f6e6e6563746f724e6f6e4e617469766555706772616465546573742e736f6ca2646970667358221220bfed2abc9ddd69ae831275114688fb25510a5561307de2cd1a8ec94378c6145b64736f6c634300081a0033", } // ZetaConnectorNonNativeTestABI is the input ABI used to generate the binding from. @@ -891,6 +891,48 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndCallReceiveNoParams(&_ZetaConnectorNonNativeTest.TransactOpts) } +// TestWithdrawAndCallReceiveOnCall is a paid mutator transaction binding the contract method 0xb0a64d03. +// +// Solidity: function testWithdrawAndCallReceiveOnCall() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactor) TestWithdrawAndCallReceiveOnCall(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.contract.Transact(opts, "testWithdrawAndCallReceiveOnCall") +} + +// TestWithdrawAndCallReceiveOnCall is a paid mutator transaction binding the contract method 0xb0a64d03. +// +// Solidity: function testWithdrawAndCallReceiveOnCall() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestSession) TestWithdrawAndCallReceiveOnCall() (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndCallReceiveOnCall(&_ZetaConnectorNonNativeTest.TransactOpts) +} + +// TestWithdrawAndCallReceiveOnCall is a paid mutator transaction binding the contract method 0xb0a64d03. +// +// Solidity: function testWithdrawAndCallReceiveOnCall() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) TestWithdrawAndCallReceiveOnCall() (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndCallReceiveOnCall(&_ZetaConnectorNonNativeTest.TransactOpts) +} + +// TestWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall is a paid mutator transaction binding the contract method 0x95665330. +// +// Solidity: function testWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactor) TestWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.contract.Transact(opts, "testWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall") +} + +// TestWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall is a paid mutator transaction binding the contract method 0x95665330. +// +// Solidity: function testWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestSession) TestWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall() (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall(&_ZetaConnectorNonNativeTest.TransactOpts) +} + +// TestWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall is a paid mutator transaction binding the contract method 0x95665330. +// +// Solidity: function testWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall() returns() +func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestTransactorSession) TestWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall() (*types.Transaction, error) { + return _ZetaConnectorNonNativeTest.Contract.TestWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall(&_ZetaConnectorNonNativeTest.TransactOpts) +} + // TestWithdrawAndFailsIfMaxSupplyIsReached is a paid mutator transaction binding the contract method 0x7db20efb. // // Solidity: function testWithdrawAndFailsIfMaxSupplyIsReached() returns() @@ -2107,12 +2149,14 @@ func (it *ZetaConnectorNonNativeTestReceivedOnCallIterator) Close() error { // ZetaConnectorNonNativeTestReceivedOnCall represents a ReceivedOnCall event raised by the ZetaConnectorNonNativeTest contract. type ZetaConnectorNonNativeTestReceivedOnCall struct { - Raw types.Log // Blockchain specific contextual infos + Sender common.Address + Message []byte + Raw types.Log // Blockchain specific contextual infos } -// FilterReceivedOnCall is a free log retrieval operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// FilterReceivedOnCall is a free log retrieval operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) FilterReceivedOnCall(opts *bind.FilterOpts) (*ZetaConnectorNonNativeTestReceivedOnCallIterator, error) { logs, sub, err := _ZetaConnectorNonNativeTest.contract.FilterLogs(opts, "ReceivedOnCall") @@ -2122,9 +2166,9 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) FilterRec return &ZetaConnectorNonNativeTestReceivedOnCallIterator{contract: _ZetaConnectorNonNativeTest.contract, event: "ReceivedOnCall", logs: logs, sub: sub}, nil } -// WatchReceivedOnCall is a free log subscription operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// WatchReceivedOnCall is a free log subscription operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) WatchReceivedOnCall(opts *bind.WatchOpts, sink chan<- *ZetaConnectorNonNativeTestReceivedOnCall) (event.Subscription, error) { logs, sub, err := _ZetaConnectorNonNativeTest.contract.WatchLogs(opts, "ReceivedOnCall") @@ -2159,9 +2203,9 @@ func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) WatchRece }), nil } -// ParseReceivedOnCall is a log parse operation binding the contract event 0x3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee. +// ParseReceivedOnCall is a log parse operation binding the contract event 0xd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a352501. // -// Solidity: event ReceivedOnCall() +// Solidity: event ReceivedOnCall(address sender, bytes message) func (_ZetaConnectorNonNativeTest *ZetaConnectorNonNativeTestFilterer) ParseReceivedOnCall(log types.Log) (*ZetaConnectorNonNativeTestReceivedOnCall, error) { event := new(ZetaConnectorNonNativeTestReceivedOnCall) if err := _ZetaConnectorNonNativeTest.contract.UnpackLog(event, "ReceivedOnCall", log); err != nil { diff --git a/v2/pkg/zetaconnectornonnativeupgradetest.sol/zetaconnectornonnativeupgradetest.go b/v2/pkg/zetaconnectornonnativeupgradetest.sol/zetaconnectornonnativeupgradetest.go index 86fe76ff..b583bdcc 100644 --- a/v2/pkg/zetaconnectornonnativeupgradetest.sol/zetaconnectornonnativeupgradetest.go +++ b/v2/pkg/zetaconnectornonnativeupgradetest.sol/zetaconnectornonnativeupgradetest.go @@ -29,6 +29,11 @@ var ( _ = abi.ConvertType ) +// MessageContext is an auto generated low-level Go binding around an user-defined struct. +type MessageContext struct { + Sender common.Address +} + // RevertContext is an auto generated low-level Go binding around an user-defined struct. type RevertContext struct { Sender common.Address @@ -39,8 +44,8 @@ type RevertContext struct { // ZetaConnectorNonNativeUpgradeTestMetaData contains all meta data concerning the ZetaConnectorNonNativeUpgradeTest contract. var ZetaConnectorNonNativeUpgradeTestMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"maxSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMaxSupply\",\"inputs\":[{\"name\":\"maxSupply_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxSupplyUpdated\",\"inputs\":[{\"name\":\"maxSupply\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", - Bin: "0x60a060405230608052348015601357600080fd5b5060805161251961003d6000396000818161145701528181611480015261165601526125196000f3fe6080604052600436106101ac5760003560e01c80636f8728ad116100ec578063a217fddf1161008a578063d547741f11610064578063d547741f1461057e578063d5abeb011461059e578063e63ab1e9146105b4578063f8c8765e146105e857600080fd5b8063a217fddf146104df578063a783c789146104f4578063ad3cb1cc1461052857600080fd5b80638456cb59116100c65780638456cb591461041157806385f438c11461042657806391d148541461045a578063950837aa146104bf57600080fd5b80636f8728ad146103b15780636f8b44b0146103d1578063743e0c9b146103f157600080fd5b806336568abe1161015957806352d1902d1161013357806352d1902d146103255780635b1125911461033a5780635c975abb1461035a5780635e3e9fef1461039157600080fd5b806336568abe146102dd5780633f4ba83a146102fd5780634f1ef2861461031257600080fd5b806321e093b11161018a57806321e093b114610240578063248a9ca3146102605780632f2ff15d146102bd57600080fd5b806301ffc9a7146101b1578063106e6290146101e6578063116191b614610208575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004611e67565b610608565b60405190151581526020015b60405180910390f35b3480156101f257600080fd5b50610206610201366004611ec5565b6106a1565b005b34801561021457600080fd5b50600054610228906001600160a01b031681565b6040516001600160a01b0390911681526020016101dd565b34801561024c57600080fd5b50600154610228906001600160a01b031681565b34801561026c57600080fd5b506102af61027b366004611ef8565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101dd565b3480156102c957600080fd5b506102066102d8366004611f11565b610758565b3480156102e957600080fd5b506102066102f8366004611f11565b6107a2565b34801561030957600080fd5b506102066107ee565b610206610320366004611f6c565b610823565b34801561033157600080fd5b506102af610842565b34801561034657600080fd5b50600254610228906001600160a01b031681565b34801561036657600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101d1565b34801561039d57600080fd5b506102066103ac3660046120bc565b610871565b3480156103bd57600080fd5b506102066103cc36600461211e565b6109bf565b3480156103dd57600080fd5b506102066103ec366004611ef8565b610b12565b3480156103fd57600080fd5b5061020661040c366004611ef8565b610b80565b34801561041d57600080fd5b50610206610c01565b34801561043257600080fd5b506102af7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561046657600080fd5b506101d1610475366004611f11565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104cb57600080fd5b506102066104da3660046121b6565b610c33565b3480156104eb57600080fd5b506102af600081565b34801561050057600080fd5b506102af7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561053457600080fd5b506105716040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101dd91906121f5565b34801561058a57600080fd5b50610206610599366004611f11565b610dc6565b3480156105aa57600080fd5b506102af60035481565b3480156105c057600080fd5b506102af7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105f457600080fd5b50610206610603366004612246565b610e0a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061069b57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6106a9610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106d381611036565b6106db611040565b6106e684848461109e565b836001600160a01b03167f3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee98460405161072191815260200190565b60405180910390a25061075360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461079281611036565b61079c838361120b565b50505050565b6001600160a01b03811633146107e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61075382826112f8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61081881611036565b6108206113bc565b50565b61082b61144c565b6108348261151c565b61083e8282611527565b5050565b600061084c61164b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610879610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46108a381611036565b6108ab611040565b6000546108c2906001600160a01b0316868461109e565b6000546001546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692635131ab5992610917929116908a908a908a908a906004016122e3565b600060405180830381600087803b15801561093157600080fd5b505af1158015610945573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d86868660405161098693929190612326565b60405180910390a2506109b860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6109c7610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109f181611036565b6109f9611040565b600054610a10906001600160a01b0316878561109e565b6000546001546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263aa0c0fc192610a67929116908b908b908b908b908a906004016123f1565b600060405180830381600087803b158015610a8157600080fd5b505af1158015610a95573d6000803e3d6000fd5b50505050866001600160a01b03167f5272d2fee39bff41b2e763562526315906046373ce08a7bacf76c3080d731ff087878786604051610ad89493929190612448565b60405180910390a250610b0a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b3c81611036565b610b44611040565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610b88611040565b6001546040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018390526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610bed57600080fd5b505af11580156109b8573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c2b81611036565b6108206116ad565b6000610c3e81611036565b6001600160a01b038216610c7e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610cb5907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166112f8565b50600254610ced907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166112f8565b50610d187f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361120b565b50610d437f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361120b565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610e0081611036565b61079c83836112f8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e555750825b905060008267ffffffffffffffff166001148015610e725750303b155b905081158015610e80575080155b15610eb7576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610f185784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610f2489898989611726565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6003558315610faa5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611030576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6108208133611a31565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561109c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600354600160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111189190612474565b611122908461248d565b111561115a576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f1e458bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018590526044820184905290911690631e458bee90606401600060405180830381600087803b1580156111c857600080fd5b505af11580156111dc573d6000803e3d6000fd5b50505050505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166112ee576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112a43390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061069b565b600091505061069b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156112ee576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061069b565b6113c4611abe565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806114e557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114d97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561109c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061083e81611036565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561159f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261159c91810190612474565b60015b6115e5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611641576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016115dc565b6107538383611b19565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461109c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116b5611040565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361142e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117715750825b905060008267ffffffffffffffff16600114801561178e5750303b155b90508115801561179c575080155b156117d3576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118345784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061185157506001600160a01b038816155b8061186357506001600160a01b038716155b8061187557506001600160a01b038616155b156118ac576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118b4611b6f565b6118bc611b77565b6118c4611b6f565b6118cc611b87565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b1691909216179055611927908761120b565b506119527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48861120b565b5061197d7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8861120b565b506119a87f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8761120b565b506119d37f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8861120b565b508315610faa5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610fa1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff1661083e576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016115dc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661109c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b2282611b97565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611b67576107538282611c3f565b61083e611cb5565b61109c611ced565b611b7f611ced565b61109c611d54565b611b8f611ced565b61109c611d5c565b806001600160a01b03163b600003611be6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016115dc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611c5c91906124c7565b600060405180830381855af49150503d8060008114611c97576040519150601f19603f3d011682016040523d82523d6000602084013e611c9c565b606091505b5091509150611cac858383611dad565b95945050505050565b341561109c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661109c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111e5611ced565b611d64611ced565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606082611dc257611dbd82611e25565b611e1e565b8151158015611dd957506001600160a01b0384163b155b15611e1b576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016115dc565b50805b9392505050565b805115611e355780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611e7957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611e1e57600080fd5b80356001600160a01b0381168114611ec057600080fd5b919050565b600080600060608486031215611eda57600080fd5b611ee384611ea9565b95602085013595506040909401359392505050565b600060208284031215611f0a57600080fd5b5035919050565b60008060408385031215611f2457600080fd5b82359150611f3460208401611ea9565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611f7f57600080fd5b611f8883611ea9565b9150602083013567ffffffffffffffff811115611fa457600080fd5b8301601f81018513611fb557600080fd5b803567ffffffffffffffff811115611fcf57611fcf611f3d565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561203b5761203b611f3d565b60405281815282820160200187101561205357600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008083601f84011261208557600080fd5b50813567ffffffffffffffff81111561209d57600080fd5b6020830191508360208285010111156120b557600080fd5b9250929050565b6000806000806000608086880312156120d457600080fd5b6120dd86611ea9565b945060208601359350604086013567ffffffffffffffff81111561210057600080fd5b61210c88828901612073565b96999598509660600135949350505050565b60008060008060008060a0878903121561213757600080fd5b61214087611ea9565b955060208701359450604087013567ffffffffffffffff81111561216357600080fd5b61216f89828a01612073565b90955093505060608701359150608087013567ffffffffffffffff81111561219657600080fd5b87016080818a0312156121a857600080fd5b809150509295509295509295565b6000602082840312156121c857600080fd5b611e1e82611ea9565b60005b838110156121ec5781810151838201526020016121d4565b50506000910152565b60208152600082518060208401526122148160408501602087016121d1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561225c57600080fd5b61226585611ea9565b935061227360208601611ea9565b925061228160408601611ea9565b915061228f60608601611ea9565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061231b60808301848661229a565b979650505050505050565b838152604060208201526000611cac60408301848661229a565b6001600160a01b0361235182611ea9565b1682526001600160a01b0361236860208301611ea9565b1660208301526040818101359083015260006060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126123b057600080fd5b820160208101903567ffffffffffffffff8111156123cd57600080fd5b8036038213156123dc57600080fd5b60806060860152611cac60808601828461229a565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061242960a08301858761229a565b828103608084015261243b8185612340565b9998505050505050505050565b84815260606020820152600061246260608301858761229a565b828103604084015261231b8185612340565b60006020828403121561248657600080fd5b5051919050565b8082018082111561069b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082516124d98184602087016121d1565b919091019291505056fea2646970667358221220eba4c2f5dade5ff34217048d440008758a00a1202245b68fa99aa106f7b708de64736f6c634300081a0033", + ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_ADMIN_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TSS_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPGRADE_INTERFACE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WITHDRAWER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gateway\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIGatewayEVM\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoleAdmin\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"hasRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"gateway_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"zetaToken_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"tssAddress_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin_\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"maxSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxiableUUID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"receiveTokens\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"callerConfirmation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"revokeRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMaxSupply\",\"inputs\":[{\"name\":\"maxSupply_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"tssAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateTSSAddress\",\"inputs\":[{\"name\":\"newTSSAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeToAndCall\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndCall\",\"inputs\":[{\"name\":\"messageContext\",\"type\":\"tuple\",\"internalType\":\"structMessageContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawAndRevert\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"internalSendHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zetaToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxSupplyUpdated\",\"inputs\":[{\"name\":\"maxSupply\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleAdminChanged\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"previousAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"newAdminRole\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleGranted\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoleRevoked\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdatedZetaConnectorTSSAddress\",\"inputs\":[{\"name\":\"oldTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newTSSAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Upgraded\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawn\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndCalled\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnAndReverted\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"revertContext\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structRevertContext\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"asset\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"revertMessage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawnV2\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AccessControlBadConfirmation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AccessControlUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"neededRole\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967InvalidImplementation\",\"inputs\":[{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ERC1967NonPayable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EnforcedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExceedsMaxSupply\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpectedPause\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnauthorizedCallContext\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UUPSUnsupportedProxiableUUID\",\"inputs\":[{\"name\":\"slot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x60a060405230608052348015601357600080fd5b5060805161252a61003d60003960008181611428015281816114510152611627015261252a6000f3fe6080604052600436106101ac5760003560e01c80636f8b44b0116100ec578063a217fddf1161008a578063d547741f11610064578063d547741f1461057e578063d5abeb011461059e578063e63ab1e9146105b4578063f8c8765e146105e857600080fd5b8063a217fddf146104df578063a783c789146104f4578063ad3cb1cc1461052857600080fd5b80638456cb59116100c65780638456cb591461041157806385f438c11461042657806391d148541461045a578063950837aa146104bf57600080fd5b80636f8b44b0146103b15780636fb9a7af146103d1578063743e0c9b146103f157600080fd5b806336568abe1161015957806352d1902d1161013357806352d1902d146103255780635b1125911461033a5780635c975abb1461035a5780636f8728ad1461039157600080fd5b806336568abe146102dd5780633f4ba83a146102fd5780634f1ef2861461031257600080fd5b806321e093b11161018a57806321e093b114610240578063248a9ca3146102605780632f2ff15d146102bd57600080fd5b806301ffc9a7146101b1578063106e6290146101e6578063116191b614610208575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004611e38565b610608565b60405190151581526020015b60405180910390f35b3480156101f257600080fd5b50610206610201366004611e96565b6106a1565b005b34801561021457600080fd5b50600054610228906001600160a01b031681565b6040516001600160a01b0390911681526020016101dd565b34801561024c57600080fd5b50600154610228906001600160a01b031681565b34801561026c57600080fd5b506102af61027b366004611ec9565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101dd565b3480156102c957600080fd5b506102066102d8366004611ee2565b610758565b3480156102e957600080fd5b506102066102f8366004611ee2565b6107a2565b34801561030957600080fd5b506102066107ee565b610206610320366004611f3d565b610823565b34801561033157600080fd5b506102af610842565b34801561034657600080fd5b50600254610228906001600160a01b031681565b34801561036657600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101d1565b34801561039d57600080fd5b506102066103ac36600461208d565b610871565b3480156103bd57600080fd5b506102066103cc366004611ec9565b6109c4565b3480156103dd57600080fd5b506102066103ec366004612125565b610a32565b3480156103fd57600080fd5b5061020661040c366004611ec9565b610b4a565b34801561041d57600080fd5b50610206610bd2565b34801561043257600080fd5b506102af7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561046657600080fd5b506101d1610475366004611ee2565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104cb57600080fd5b506102066104da3660046121a4565b610c04565b3480156104eb57600080fd5b506102af600081565b34801561050057600080fd5b506102af7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561053457600080fd5b506105716040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101dd91906121e3565b34801561058a57600080fd5b50610206610599366004611ee2565b610d97565b3480156105aa57600080fd5b506102af60035481565b3480156105c057600080fd5b506102af7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105f457600080fd5b50610206610603366004612234565b610ddb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061069b57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6106a9610f86565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106d381611007565b6106db611011565b6106e684848461106f565b836001600160a01b03167f3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee98460405161072191815260200190565b60405180910390a25061075360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461079281611007565b61079c83836111dc565b50505050565b6001600160a01b03811633146107e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61075382826112c9565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61081881611007565b61082061138d565b50565b61082b61141d565b610834826114ed565b61083e82826114f8565b5050565b600061084c61161c565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610879610f86565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46108a381611007565b6108ab611011565b6000546108c2906001600160a01b0316878561106f565b6000546001546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263aa0c0fc192610919929116908b908b908b908b908a90600401612382565b600060405180830381600087803b15801561093357600080fd5b505af1158015610947573d6000803e3d6000fd5b50505050866001600160a01b03167f5272d2fee39bff41b2e763562526315906046373ce08a7bacf76c3080d731ff08787878660405161098a94939291906123d9565b60405180910390a2506109bc60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109ee81611007565b6109f6611011565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610a3a610f86565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a6481611007565b610a6c611011565b600054610a83906001600160a01b0316868461106f565b6000546001546040517f7bbe9afa0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692637bbe9afa92610adb928c92909116908b908b908b908b90600401612410565b600060405180830381600087803b158015610af557600080fd5b505af1158015610b09573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d86868660405161098a9392919061246b565b610b52611011565b6001546040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018390526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610bb757600080fd5b505af1158015610bcb573d6000803e3d6000fd5b5050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610bfc81611007565b61082061167e565b6000610c0f81611007565b6001600160a01b038216610c4f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610c86907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166112c9565b50600254610cbe907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166112c9565b50610ce97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836111dc565b50610d147f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb836111dc565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610dd181611007565b61079c83836112c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e265750825b905060008267ffffffffffffffff166001148015610e435750303b155b905081158015610e51575080155b15610e88576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610ee95784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610ef5898989896116f7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6003558315610f7b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611001576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6108208133611a02565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561106d576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600354600160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e99190612485565b6110f3908461249e565b111561112b576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f1e458bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018590526044820184905290911690631e458bee90606401600060405180830381600087803b15801561119957600080fd5b505af11580156111ad573d6000803e3d6000fd5b50505050505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166112bf576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112753390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061069b565b600091505061069b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156112bf576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061069b565b611395611a8f565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806114b657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114aa7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561106d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061083e81611007565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611570575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261156d91810190612485565b60015b6115b6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611612576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016115ad565b6107538383611aea565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461106d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611686611011565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336113ff565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117425750825b905060008267ffffffffffffffff16600114801561175f5750303b155b90508115801561176d575080155b156117a4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118055784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061182257506001600160a01b038816155b8061183457506001600160a01b038716155b8061184657506001600160a01b038616155b1561187d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611885611b40565b61188d611b48565b611895611b40565b61189d611b58565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b16919092161790556118f890876111dc565b506119237f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4886111dc565b5061194e7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb886111dc565b506119797f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876111dc565b506119a47f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a886111dc565b508315610f7b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610f72565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff1661083e576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016115ad565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661106d576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611af382611b68565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611b38576107538282611c10565b61083e611c86565b61106d611cbe565b611b50611cbe565b61106d611d25565b611b60611cbe565b61106d611d2d565b806001600160a01b03163b600003611bb7576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016115ad565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611c2d91906124d8565b600060405180830381855af49150503d8060008114611c68576040519150601f19603f3d011682016040523d82523d6000602084013e611c6d565b606091505b5091509150611c7d858383611d7e565b95945050505050565b341561106d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661106d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111b6611cbe565b611d35611cbe565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606082611d9357611d8e82611df6565b611def565b8151158015611daa57506001600160a01b0384163b155b15611dec576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016115ad565b50805b9392505050565b805115611e065780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611e4a57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611def57600080fd5b80356001600160a01b0381168114611e9157600080fd5b919050565b600080600060608486031215611eab57600080fd5b611eb484611e7a565b95602085013595506040909401359392505050565b600060208284031215611edb57600080fd5b5035919050565b60008060408385031215611ef557600080fd5b82359150611f0560208401611e7a565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611f5057600080fd5b611f5983611e7a565b9150602083013567ffffffffffffffff811115611f7557600080fd5b8301601f81018513611f8657600080fd5b803567ffffffffffffffff811115611fa057611fa0611f0e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561200c5761200c611f0e565b60405281815282820160200187101561202457600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008083601f84011261205657600080fd5b50813567ffffffffffffffff81111561206e57600080fd5b60208301915083602082850101111561208657600080fd5b9250929050565b60008060008060008060a087890312156120a657600080fd5b6120af87611e7a565b955060208701359450604087013567ffffffffffffffff8111156120d257600080fd5b6120de89828a01612044565b90955093505060608701359150608087013567ffffffffffffffff81111561210557600080fd5b87016080818a03121561211757600080fd5b809150509295509295509295565b60008060008060008086880360a081121561213f57600080fd5b602081121561214d57600080fd5b5086955061215d60208801611e7a565b945060408701359350606087013567ffffffffffffffff81111561218057600080fd5b61218c89828a01612044565b979a9699509497949695608090950135949350505050565b6000602082840312156121b657600080fd5b611def82611e7a565b60005b838110156121da5781810151838201526020016121c2565b50506000910152565b60208152600082518060208401526122028160408501602087016121bf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561224a57600080fd5b61225385611e7a565b935061226160208601611e7a565b925061226f60408601611e7a565b915061227d60608601611e7a565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b036122e282611e7a565b1682526001600160a01b036122f960208301611e7a565b1660208301526040818101359083015260006060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261234157600080fd5b820160208101903567ffffffffffffffff81111561235e57600080fd5b80360382131561236d57600080fd5b60806060860152611c7d608086018284612288565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006123ba60a083018587612288565b82810360808401526123cc81856122d1565b9998505050505050505050565b8481526060602082015260006123f3606083018587612288565b828103604084015261240581856122d1565b979650505050505050565b6001600160a01b0361242188611e7a565b1681526001600160a01b03861660208201526001600160a01b038516604082015283606082015260a06080820152600061245f60a083018486612288565b98975050505050505050565b838152604060208201526000611c7d604083018486612288565b60006020828403121561249757600080fd5b5051919050565b8082018082111561069b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082516124ea8184602087016121bf565b919091019291505056fea264697066735822122012f1cc9a69df210b47cc212447c9dd80eb15b7167b397eab0c291e9f0f483d2564736f6c634300081a0033", } // ZetaConnectorNonNativeUpgradeTestABI is the input ABI used to generate the binding from. @@ -875,25 +880,25 @@ func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTrans return _ZetaConnectorNonNativeUpgradeTest.Contract.Withdraw(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, to, amount, internalSendHash) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x5e3e9fef. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x6fb9a7af. // -// Solidity: function withdrawAndCall(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() -func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactor) WithdrawAndCall(opts *bind.TransactOpts, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { - return _ZetaConnectorNonNativeUpgradeTest.contract.Transact(opts, "withdrawAndCall", to, amount, data, internalSendHash) +// Solidity: function withdrawAndCall((address) messageContext, address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactor) WithdrawAndCall(opts *bind.TransactOpts, messageContext MessageContext, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.contract.Transact(opts, "withdrawAndCall", messageContext, to, amount, data, internalSendHash) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x5e3e9fef. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x6fb9a7af. // -// Solidity: function withdrawAndCall(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() -func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) WithdrawAndCall(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { - return _ZetaConnectorNonNativeUpgradeTest.Contract.WithdrawAndCall(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, to, amount, data, internalSendHash) +// Solidity: function withdrawAndCall((address) messageContext, address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestSession) WithdrawAndCall(messageContext MessageContext, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.WithdrawAndCall(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, messageContext, to, amount, data, internalSendHash) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x5e3e9fef. +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x6fb9a7af. // -// Solidity: function withdrawAndCall(address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() -func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactorSession) WithdrawAndCall(to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { - return _ZetaConnectorNonNativeUpgradeTest.Contract.WithdrawAndCall(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, to, amount, data, internalSendHash) +// Solidity: function withdrawAndCall((address) messageContext, address to, uint256 amount, bytes data, bytes32 internalSendHash) returns() +func (_ZetaConnectorNonNativeUpgradeTest *ZetaConnectorNonNativeUpgradeTestTransactorSession) WithdrawAndCall(messageContext MessageContext, to common.Address, amount *big.Int, data []byte, internalSendHash [32]byte) (*types.Transaction, error) { + return _ZetaConnectorNonNativeUpgradeTest.Contract.WithdrawAndCall(&_ZetaConnectorNonNativeUpgradeTest.TransactOpts, messageContext, to, amount, data, internalSendHash) } // WithdrawAndRevert is a paid mutator transaction binding the contract method 0x6f8728ad. diff --git a/v2/test/ERC20Custody.t.sol b/v2/test/ERC20Custody.t.sol index 9c85a6dc..41fee162 100644 --- a/v2/test/ERC20Custody.t.sol +++ b/v2/test/ERC20Custody.t.sol @@ -35,6 +35,7 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv address tssAddress; address foo; RevertContext revertContext; + MessageContext arbitraryCallMessageContext = MessageContext({ sender: address(0) }); error EnforcedPause(); error NotWhitelisted(); @@ -203,7 +204,7 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv vm.expectEmit(true, true, true, true, address(custody)); emit WithdrawnAndCalled(address(receiver), address(token), amount, data); vm.prank(tssAddress); - custody.withdrawAndCall(address(receiver), address(token), amount, data); + custody.withdrawAndCall(arbitraryCallMessageContext, address(receiver), address(token), amount, data); // Verify that the tokens were transferred to the destination address uint256 balanceAfter = token.balanceOf(destination); @@ -240,7 +241,7 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv vm.expectRevert(EnforcedPause.selector); vm.prank(tssAddress); - custody.withdrawAndCall(address(receiver), address(token), amount, data); + custody.withdrawAndCall(arbitraryCallMessageContext, address(receiver), address(token), amount, data); vm.prank(owner); custody.unpause(); @@ -256,7 +257,7 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv vm.expectEmit(true, true, true, true, address(custody)); emit WithdrawnAndCalled(address(receiver), address(token), amount, data); vm.prank(tssAddress); - custody.withdrawAndCall(address(receiver), address(token), amount, data); + custody.withdrawAndCall(arbitraryCallMessageContext, address(receiver), address(token), amount, data); // Verify that the tokens were transferred to the destination address uint256 balanceAfter = token.balanceOf(destination); @@ -282,7 +283,7 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv vm.prank(owner); vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, owner, WITHDRAWER_ROLE)); - custody.withdrawAndCall(address(receiver), address(token), amount, data); + custody.withdrawAndCall(arbitraryCallMessageContext, address(receiver), address(token), amount, data); } function testForwardCallToReceiveERC20ThroughCustodyFailsIfAmountIs0() public { @@ -292,7 +293,7 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv vm.prank(tssAddress); vm.expectRevert(InsufficientERC20Amount.selector); - custody.withdrawAndCall(address(receiver), address(token), amount, data); + custody.withdrawAndCall(arbitraryCallMessageContext, address(receiver), address(token), amount, data); } function testForwardCallToReceiveERC20ThroughCustodyFailsIfReceiverIsZeroAddress() public { @@ -302,7 +303,7 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv vm.prank(tssAddress); vm.expectRevert(ZeroAddress.selector); - custody.withdrawAndCall(address(0), address(token), amount, data); + custody.withdrawAndCall(arbitraryCallMessageContext, address(0), address(token), amount, data); } function testForwardCallToReceiveERC20PartialThroughCustody() public { @@ -320,7 +321,7 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv vm.expectEmit(true, true, true, true, address(custody)); emit WithdrawnAndCalled(address(receiver), address(token), amount, data); vm.prank(tssAddress); - custody.withdrawAndCall(address(receiver), address(token), amount, data); + custody.withdrawAndCall(arbitraryCallMessageContext, address(receiver), address(token), amount, data); // Verify that the tokens were transferred to the destination address uint256 balanceAfter = token.balanceOf(destination); @@ -339,6 +340,58 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv assertEq(balanceGateway, 0); } + function testForwardCallToReceiveOnCallThroughCustody() public { + uint256 amount = 100_000; + address sender = address(0x123); + bytes memory message = bytes("1"); + uint256 balanceBefore = token.balanceOf(destination); + assertEq(balanceBefore, 0); + uint256 balanceBeforeCustody = token.balanceOf(address(custody)); + + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedOnCall(sender, message); + vm.expectEmit(true, true, true, true, address(custody)); + emit WithdrawnAndCalled(address(receiver), address(token), amount, message); + vm.prank(tssAddress); + custody.withdrawAndCall(MessageContext({ sender: sender }), address(receiver), address(token), amount, message); + + // Verify that the tokens were not transferred to the destination address + uint256 balanceAfter = token.balanceOf(destination); + assertEq(balanceAfter, 0); + + // Verify that the remaining tokens were refunded to the Custody contract + uint256 balanceAfterCustody = token.balanceOf(address(custody)); + assertEq(balanceAfterCustody, balanceBeforeCustody); + + // Verify that the approval was reset + uint256 allowance = token.allowance(address(gateway), address(receiver)); + assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = token.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } + + function testForwardCallToReceiveOnCallThroughCustodyNotAllowedWithArbitraryCall() public { + uint256 amount = 100_000; + address sender = address(0x123); + bytes memory message = bytes("1"); + bytes memory data = abi.encodeWithSignature("onCall((address),bytes)", sender, message); + + vm.expectRevert(NotAllowedToCallOnCall.selector); + vm.prank(tssAddress); + custody.withdrawAndCall(arbitraryCallMessageContext, address(receiver), address(token), amount, data); + } + + function testForwardCallOnRevertThroughCustodyNotAllowedWithArbitraryCall() public { + uint256 amount = 100_000; + bytes memory data = abi.encodeWithSignature("onRevert((address,address,uint256,bytes))"); + + vm.expectRevert(NotAllowedToCallOnRevert.selector); + vm.prank(tssAddress); + custody.withdrawAndCall(arbitraryCallMessageContext, address(receiver), address(token), amount, data); + } + function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfSenderIsNotWithdrawer() public { uint256 amount = 100_000; bytes memory data = @@ -346,7 +399,7 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv vm.prank(owner); vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, owner, WITHDRAWER_ROLE)); - custody.withdrawAndCall(address(receiver), address(token), amount, data); + custody.withdrawAndCall(arbitraryCallMessageContext, address(receiver), address(token), amount, data); } function testForwardCallToReceiveERC20PartialThroughCustodyFailsIfAmountIs0() public { @@ -356,7 +409,7 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv vm.prank(tssAddress); vm.expectRevert(InsufficientERC20Amount.selector); - custody.withdrawAndCall(address(receiver), address(token), amount, data); + custody.withdrawAndCall(arbitraryCallMessageContext, address(receiver), address(token), amount, data); } function testForwardCallToReceiveNoParamsThroughCustody() public { @@ -373,7 +426,7 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv vm.expectEmit(true, true, true, true, address(custody)); emit WithdrawnAndCalled(address(receiver), address(token), amount, data); vm.prank(tssAddress); - custody.withdrawAndCall(address(receiver), address(token), amount, data); + custody.withdrawAndCall(arbitraryCallMessageContext, address(receiver), address(token), amount, data); // Verify that the tokens were not transferred to the destination address uint256 balanceAfter = token.balanceOf(destination); @@ -406,7 +459,7 @@ contract ERC20CustodyTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiv vm.startPrank(tssAddress); custody.unwhitelist(address(token)); vm.expectRevert(NotWhitelisted.selector); - custody.withdrawAndCall(address(receiver), address(token), 1, data); + custody.withdrawAndCall(arbitraryCallMessageContext, address(receiver), address(token), 1, data); vm.stopPrank(); } diff --git a/v2/test/GatewayEVM.t.sol b/v2/test/GatewayEVM.t.sol index fa15df2b..9676a288 100644 --- a/v2/test/GatewayEVM.t.sol +++ b/v2/test/GatewayEVM.t.sol @@ -37,6 +37,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver address foo; RevertOptions revertOptions; RevertContext revertContext; + MessageContext arbitraryCallMessageContext = MessageContext({ sender: address(0) }); error EnforcedPause(); error AccessControlUnauthorizedAccount(address account, bytes32 neededRole); @@ -180,16 +181,17 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver vm.expectEmit(true, true, true, true, address(gateway)); emit Executed(address(receiver), 0, data); vm.prank(tssAddress); - gateway.execute(address(receiver), data); + gateway.execute(arbitraryCallMessageContext, address(receiver), data); } function testForwardCallToReceiveOnCallUsingAuthCall() public { vm.expectEmit(true, true, true, true, address(receiver)); - emit ReceivedOnCall(); + address sender = address(0x123); + emit ReceivedOnCall(sender, bytes("1")); vm.expectEmit(true, true, true, true, address(gateway)); emit Executed(address(receiver), 0, bytes("1")); vm.prank(tssAddress); - gateway.execute(MessageContext({ sender: address(0x123) }), address(receiver), bytes("1")); + gateway.execute(MessageContext({ sender: sender }), address(receiver), bytes("1")); } function testForwardCallToReceiveNonPayableFailsIfSenderIsNotTSS() public { @@ -202,7 +204,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver vm.prank(owner); vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, owner, TSS_ROLE)); - gateway.execute(address(receiver), data); + gateway.execute(arbitraryCallMessageContext, address(receiver), data); } function testForwardCallToReceiveNonPayableWithMsgContextFailsIfSenderIsNotTSS() public { @@ -233,7 +235,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver vm.expectEmit(true, true, true, true, address(gateway)); emit Executed(address(receiver), 1 ether, data); vm.prank(tssAddress); - gateway.execute{ value: value }(address(receiver), data); + gateway.execute{ value: value }(arbitraryCallMessageContext, address(receiver), data); assertEq(value, address(receiver).balance); } @@ -247,7 +249,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver vm.expectEmit(true, true, true, true, address(gateway)); emit Executed(address(receiver), 0, data); vm.prank(tssAddress); - gateway.execute(address(receiver), data); + gateway.execute(arbitraryCallMessageContext, address(receiver), data); } function testForwardCallToReceiveOnCallFails() public { @@ -255,7 +257,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver vm.prank(tssAddress); vm.expectRevert(NotAllowedToCallOnCall.selector); - gateway.execute(address(receiver), data); + gateway.execute(arbitraryCallMessageContext, address(receiver), data); } function testForwardCallToReceiveOnRevertFails() public { @@ -263,7 +265,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver vm.prank(tssAddress); vm.expectRevert(NotAllowedToCallOnRevert.selector); - gateway.execute(address(receiver), data); + gateway.execute(arbitraryCallMessageContext, address(receiver), data); } function testExecuteFailsIfDestinationIsZeroAddress() public { @@ -271,7 +273,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver vm.prank(tssAddress); vm.expectRevert(ZeroAddress.selector); - gateway.execute(address(0), data); + gateway.execute(arbitraryCallMessageContext, address(0), data); } function testExecuteWithMsgContextFailsIfDestinationIsZeroAddress() public { @@ -298,7 +300,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver vm.expectRevert(EnforcedPause.selector); vm.prank(tssAddress); - gateway.execute(address(receiver), data); + gateway.execute(arbitraryCallMessageContext, address(receiver), data); vm.prank(owner); gateway.unpause(); @@ -309,7 +311,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver vm.expectEmit(true, true, true, true, address(gateway)); emit Executed(address(receiver), 0, data); vm.prank(tssAddress); - gateway.execute(address(receiver), data); + gateway.execute(arbitraryCallMessageContext, address(receiver), data); } function testExecuteWithERC20FailsIfNotCustodyOrConnector() public { @@ -319,7 +321,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver vm.prank(owner); vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, owner, ASSET_HANDLER_ROLE)); - gateway.executeWithERC20(address(token), destination, amount, data); + gateway.executeWithERC20(arbitraryCallMessageContext, address(token), destination, amount, data); } function testRevertWithERC20FailsIfNotCustodyOrConnector() public { @@ -389,7 +391,7 @@ contract GatewayEVMTest is Test, IGatewayEVMErrors, IGatewayEVMEvents, IReceiver vm.expectEmit(true, true, true, true, address(gateway)); emit ExecutedV2(address(receiver), value, data); vm.prank(tssAddress); - gatewayUpgradeTest.execute{ value: value }(address(receiver), data); + gatewayUpgradeTest.execute{ value: value }(arbitraryCallMessageContext, address(receiver), data); assertEq(custodyBeforeUpgrade, gateway.custody()); assertEq(tssBeforeUpgrade, gateway.tssAddress()); diff --git a/v2/test/GatewayEVMZEVM.t.sol b/v2/test/GatewayEVMZEVM.t.sol index f8950f65..65b9ea58 100644 --- a/v2/test/GatewayEVMZEVM.t.sol +++ b/v2/test/GatewayEVMZEVM.t.sol @@ -50,6 +50,7 @@ contract GatewayEVMZEVMTest is address ownerEVM; address destination; address tssAddress; + MessageContext arbitraryCallMessageContext = MessageContext({ sender: address(0) }); // zevm address payable proxyZEVM; @@ -166,7 +167,7 @@ contract GatewayEVMZEVMTest is vm.expectEmit(true, true, true, true, address(gatewayEVM)); emit Executed(address(receiverEVM), value, message); vm.prank(tssAddress); - gatewayEVM.execute{ value: value }(address(receiverEVM), message); + gatewayEVM.execute{ value: value }(arbitraryCallMessageContext, address(receiverEVM), message); } function testCallReceiverEVMFromSenderZEVM() public { @@ -196,7 +197,7 @@ contract GatewayEVMZEVMTest is vm.expectEmit(true, true, true, true, address(gatewayEVM)); emit Executed(address(receiverEVM), value, message); vm.prank(tssAddress); - gatewayEVM.execute{ value: value }(address(receiverEVM), message); + gatewayEVM.execute{ value: value }(arbitraryCallMessageContext, address(receiverEVM), message); } function testWithdrawAndCallReceiverEVMFromZEVM() public { @@ -242,7 +243,7 @@ contract GatewayEVMZEVMTest is vm.expectEmit(true, true, true, true, address(gatewayEVM)); emit Executed(address(receiverEVM), value, message); vm.prank(tssAddress); - gatewayEVM.execute{ value: value }(address(receiverEVM), message); + gatewayEVM.execute{ value: value }(arbitraryCallMessageContext, address(receiverEVM), message); } function testWithdrawAndCallReceiverEVMFromSenderZEVM() public { @@ -274,7 +275,7 @@ contract GatewayEVMZEVMTest is vm.expectEmit(true, true, true, true, address(gatewayEVM)); emit Executed(address(receiverEVM), value, message); vm.prank(tssAddress); - gatewayEVM.execute{ value: value }(address(receiverEVM), message); + gatewayEVM.execute{ value: value }(arbitraryCallMessageContext, address(receiverEVM), message); // Check the balance after withdrawal uint256 senderBalanceAfterWithdrawal = IZRC20(zrc20).balanceOf(address(senderZEVM)); diff --git a/v2/test/ZetaConnectorNative.t.sol b/v2/test/ZetaConnectorNative.t.sol index ade3592f..f3d581ce 100644 --- a/v2/test/ZetaConnectorNative.t.sol +++ b/v2/test/ZetaConnectorNative.t.sol @@ -41,6 +41,7 @@ contract ZetaConnectorNativeTest is address tssAddress; address foo; RevertContext revertContext; + MessageContext arbitraryCallMessageContext = MessageContext({ sender: address(0) }); error EnforcedPause(); error AccessControlUnauthorizedAccount(address account, bytes32 neededRole); @@ -209,7 +210,7 @@ contract ZetaConnectorNativeTest is vm.expectEmit(true, true, true, true, address(zetaConnector)); emit WithdrawnAndCalled(address(receiver), amount, data); vm.prank(tssAddress); - zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + zetaConnector.withdrawAndCall(arbitraryCallMessageContext, address(receiver), amount, data, internalSendHash); // Verify that the tokens were transferred to the destination address uint256 balanceAfter = zetaToken.balanceOf(destination); @@ -228,6 +229,53 @@ contract ZetaConnectorNativeTest is assertEq(balanceGateway, 0); } + function testWithdrawAndCallReceiveOnCall() public { + uint256 amount = 100_000; + bytes32 internalSendHash = ""; + address sender = address(0x123); + bytes memory message = bytes("1"); + uint256 balanceBefore = zetaToken.balanceOf(destination); + assertEq(balanceBefore, 0); + uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedOnCall(sender, message); + vm.expectEmit(true, true, true, true, address(zetaConnector)); + emit WithdrawnAndCalled(address(receiver), amount, message); + vm.prank(tssAddress); + zetaConnector.withdrawAndCall( + MessageContext({ sender: sender }), address(receiver), amount, message, internalSendHash + ); + + // Verify that the no tokens were transferred to the destination address + uint256 balanceAfter = zetaToken.balanceOf(destination); + assertEq(balanceAfter, 0); + + // Verify that zeta connector doesn't get more tokens + uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + assertEq(balanceAfterZetaConnector, balanceBeforeZetaConnector); + + // Verify that the approval was reset + uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); + assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } + + function testWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall() public { + uint256 amount = 100_000; + bytes32 internalSendHash = ""; + address sender = address(0x123); + bytes memory message = bytes("1"); + bytes memory data = abi.encodeWithSignature("onCall((address),bytes)", sender, message); + + vm.expectRevert(NotAllowedToCallOnCall.selector); + vm.prank(tssAddress); + zetaConnector.withdrawAndCall(arbitraryCallMessageContext, address(receiver), amount, data, internalSendHash); + } + function testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer() public { uint256 amount = 100_000; bytes32 internalSendHash = ""; @@ -236,7 +284,7 @@ contract ZetaConnectorNativeTest is vm.prank(owner); vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, owner, WITHDRAWER_ROLE)); - zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + zetaConnector.withdrawAndCall(arbitraryCallMessageContext, address(receiver), amount, data, internalSendHash); } function testWithdrawAndCallReceiveNoParams() public { @@ -254,7 +302,7 @@ contract ZetaConnectorNativeTest is vm.expectEmit(true, true, true, true, address(zetaConnector)); emit WithdrawnAndCalled(address(receiver), amount, data); vm.prank(tssAddress); - zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + zetaConnector.withdrawAndCall(arbitraryCallMessageContext, address(receiver), amount, data, internalSendHash); // Verify that the no tokens were transferred to the destination address uint256 balanceAfter = zetaToken.balanceOf(destination); @@ -290,7 +338,7 @@ contract ZetaConnectorNativeTest is vm.expectEmit(true, true, true, true, address(zetaConnector)); emit WithdrawnAndCalled(address(receiver), amount, data); vm.prank(tssAddress); - zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + zetaConnector.withdrawAndCall(arbitraryCallMessageContext, address(receiver), amount, data, internalSendHash); // Verify that the tokens were transferred to the destination address uint256 balanceAfter = zetaToken.balanceOf(destination); diff --git a/v2/test/ZetaConnectorNonNative.t.sol b/v2/test/ZetaConnectorNonNative.t.sol index f79da5c8..08128f4f 100644 --- a/v2/test/ZetaConnectorNonNative.t.sol +++ b/v2/test/ZetaConnectorNonNative.t.sol @@ -41,6 +41,7 @@ contract ZetaConnectorNonNativeTest is address tssAddress; address foo; RevertContext revertContext; + MessageContext arbitraryCallMessageContext = MessageContext({ sender: address(0) }); error AccessControlUnauthorizedAccount(address account, bytes32 neededRole); error ExceedsMaxSupply(); @@ -170,7 +171,7 @@ contract ZetaConnectorNonNativeTest is vm.expectEmit(true, true, true, true, address(zetaConnector)); emit WithdrawnAndCalled(address(receiver), amount, data); vm.prank(tssAddress); - zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + zetaConnector.withdrawAndCall(arbitraryCallMessageContext, address(receiver), amount, data, internalSendHash); // Verify that the tokens were transferred to the destination address uint256 balanceAfter = zetaToken.balanceOf(destination); @@ -189,6 +190,53 @@ contract ZetaConnectorNonNativeTest is assertEq(balanceGateway, 0); } + function testWithdrawAndCallReceiveOnCall() public { + uint256 amount = 100_000; + bytes32 internalSendHash = ""; + address sender = address(0x123); + bytes memory message = bytes("1"); + uint256 balanceBefore = zetaToken.balanceOf(destination); + assertEq(balanceBefore, 0); + uint256 balanceBeforeZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + + vm.expectEmit(true, true, true, true, address(receiver)); + emit ReceivedOnCall(sender, message); + vm.expectEmit(true, true, true, true, address(zetaConnector)); + emit WithdrawnAndCalled(address(receiver), amount, message); + vm.prank(tssAddress); + zetaConnector.withdrawAndCall( + MessageContext({ sender: sender }), address(receiver), amount, message, internalSendHash + ); + + // Verify that the no tokens were transferred to the destination address + uint256 balanceAfter = zetaToken.balanceOf(destination); + assertEq(balanceAfter, 0); + + // Verify that zeta connector doesn't get more tokens + uint256 balanceAfterZetaConnector = zetaToken.balanceOf(address(zetaConnector)); + assertEq(balanceAfterZetaConnector, balanceBeforeZetaConnector); + + // Verify that the approval was reset + uint256 allowance = zetaToken.allowance(address(gateway), address(receiver)); + assertEq(allowance, 0); + + // Verify that gateway doesn't hold any tokens + uint256 balanceGateway = zetaToken.balanceOf(address(gateway)); + assertEq(balanceGateway, 0); + } + + function testWithdrawAndCallReceiveOnCallTNotAllowedWithArbitraryCall() public { + uint256 amount = 100_000; + bytes32 internalSendHash = ""; + address sender = address(0x123); + bytes memory message = bytes("1"); + bytes memory data = abi.encodeWithSignature("onCall((address),bytes)", sender, message); + + vm.expectRevert(NotAllowedToCallOnCall.selector); + vm.prank(tssAddress); + zetaConnector.withdrawAndCall(arbitraryCallMessageContext, address(receiver), amount, data, internalSendHash); + } + function testWithdrawAndCallReceiveERC20FailsIfSenderIsNotWithdrawer() public { uint256 amount = 100_000; bytes32 internalSendHash = ""; @@ -197,7 +245,7 @@ contract ZetaConnectorNonNativeTest is vm.prank(owner); vm.expectRevert(abi.encodeWithSelector(AccessControlUnauthorizedAccount.selector, owner, WITHDRAWER_ROLE)); - zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + zetaConnector.withdrawAndCall(arbitraryCallMessageContext, address(receiver), amount, data, internalSendHash); } function testWithdrawAndCallReceiveNoParams() public { @@ -217,7 +265,7 @@ contract ZetaConnectorNonNativeTest is vm.expectEmit(true, true, true, true, address(zetaConnector)); emit WithdrawnAndCalled(address(receiver), amount, data); vm.prank(tssAddress); - zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + zetaConnector.withdrawAndCall(arbitraryCallMessageContext, address(receiver), amount, data, internalSendHash); // Verify that the no tokens were transferred to the destination address uint256 balanceAfter = zetaToken.balanceOf(destination); @@ -255,7 +303,7 @@ contract ZetaConnectorNonNativeTest is vm.expectEmit(true, true, true, true, address(zetaConnector)); emit WithdrawnAndCalled(address(receiver), amount, data); vm.prank(tssAddress); - zetaConnector.withdrawAndCall(address(receiver), amount, data, internalSendHash); + zetaConnector.withdrawAndCall(arbitraryCallMessageContext, address(receiver), amount, data, internalSendHash); // Verify that the tokens were transferred to the destination address uint256 balanceAfter = zetaToken.balanceOf(destination); @@ -342,7 +390,7 @@ contract ZetaConnectorNonNativeTest is vm.prank(tssAddress); vm.expectRevert(ExceedsMaxSupply.selector); - zetaConnector.withdrawAndCall(address(receiver), amount + 1, data, ""); + zetaConnector.withdrawAndCall(arbitraryCallMessageContext, address(receiver), amount + 1, data, ""); } function testWithdrawAndRevertFailsIfMaxSupplyIsReached() public { diff --git a/v2/test/utils/IReceiverEVM.sol b/v2/test/utils/IReceiverEVM.sol index d08c7dfd..bd6131e3 100644 --- a/v2/test/utils/IReceiverEVM.sol +++ b/v2/test/utils/IReceiverEVM.sol @@ -37,5 +37,8 @@ interface IReceiverEVMEvents { /// @param revertContext Revert Context. event ReceivedRevert(address sender, RevertContext revertContext); - event ReceivedOnCall(); + /// @notice Emitted when onCall function is called with authenticated call. + /// @param sender Message context sender. + /// @param message Message received. + event ReceivedOnCall(address sender, bytes message); } diff --git a/v2/test/utils/ReceiverEVM.sol b/v2/test/utils/ReceiverEVM.sol index 35e36b0e..ee35626d 100644 --- a/v2/test/utils/ReceiverEVM.sol +++ b/v2/test/utils/ReceiverEVM.sol @@ -73,8 +73,15 @@ contract ReceiverEVM is IReceiverEVMEvents, ReentrancyGuard { emit ReceivedRevert(msg.sender, revertContext); } - function onCall(MessageContext calldata, bytes calldata) external payable returns (bytes memory) { - emit ReceivedOnCall(); + function onCall( + MessageContext calldata messageContext, + bytes calldata message + ) + external + payable + returns (bytes memory) + { + emit ReceivedOnCall(messageContext.sender, message); return ""; } diff --git a/v2/test/utils/upgrades/ERC20CustodyUpgradeTest.sol b/v2/test/utils/upgrades/ERC20CustodyUpgradeTest.sol index d5573587..8f50afb8 100644 --- a/v2/test/utils/upgrades/ERC20CustodyUpgradeTest.sol +++ b/v2/test/utils/upgrades/ERC20CustodyUpgradeTest.sol @@ -2,7 +2,7 @@ pragma solidity 0.8.26; import { IERC20Custody } from "../../../contracts/evm/interfaces/IERC20Custody.sol"; -import { IGatewayEVM } from "../../../contracts/evm/interfaces/IGatewayEVM.sol"; +import { IGatewayEVM, MessageContext } from "../../../contracts/evm/interfaces/IGatewayEVM.sol"; import { RevertContext } from "../../../contracts/Revert.sol"; @@ -63,6 +63,7 @@ contract ERC20CustodyUpgradeTest is tssAddress = tssAddress_; _grantRole(DEFAULT_ADMIN_ROLE, admin_); _grantRole(PAUSER_ROLE, admin_); + _grantRole(PAUSER_ROLE, tssAddress_); _grantRole(WITHDRAWER_ROLE, tssAddress_); _grantRole(WHITELISTER_ROLE, admin_); _grantRole(WHITELISTER_ROLE, tssAddress_); @@ -93,9 +94,9 @@ contract ERC20CustodyUpgradeTest is _grantRole(WITHDRAWER_ROLE, newTSSAddress); _grantRole(WHITELISTER_ROLE, newTSSAddress); - tssAddress = newTSSAddress; - emit UpdatedCustodyTSSAddress(tssAddress, newTSSAddress); + + tssAddress = newTSSAddress; } /// @notice Unpause contract. @@ -143,11 +144,13 @@ contract ERC20CustodyUpgradeTest is /// @notice WithdrawAndCall transfers tokens to Gateway and call a contract through the Gateway. /// @dev This function can only be called by the TSS address. + /// @param messageContext Message context containing sender. /// @param to Address of the contract to call. /// @param token Address of the ERC20 token. /// @param amount Amount of tokens to withdraw. /// @param data Calldata to pass to the contract call. function withdrawAndCall( + MessageContext calldata messageContext, address to, address token, uint256 amount, @@ -164,7 +167,7 @@ contract ERC20CustodyUpgradeTest is IERC20(token).safeTransfer(address(gateway), amount); // Forward the call to the Gateway contract - gateway.executeWithERC20(token, to, amount, data); + gateway.executeWithERC20(messageContext, token, to, amount, data); emit WithdrawnAndCalled(to, token, amount, data); } diff --git a/v2/test/utils/upgrades/GatewayEVMUpgradeTest.sol b/v2/test/utils/upgrades/GatewayEVMUpgradeTest.sol index 21670807..f2102bd7 100644 --- a/v2/test/utils/upgrades/GatewayEVMUpgradeTest.sol +++ b/v2/test/utils/upgrades/GatewayEVMUpgradeTest.sol @@ -1,6 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.26; +import { INotSupportedMethods } from "../../../contracts/Errors.sol"; import { RevertContext, RevertOptions, Revertable } from "../../../contracts/Revert.sol"; import "../../../contracts/evm/ZetaConnectorBase.sol"; import "../../../contracts/evm/interfaces/IERC20Custody.sol"; @@ -24,7 +25,8 @@ contract GatewayEVMUpgradeTest is UUPSUpgradeable, IGatewayEVM, ReentrancyGuardUpgradeable, - PausableUpgradeable + PausableUpgradeable, + INotSupportedMethods { using SafeERC20 for IERC20; @@ -46,6 +48,8 @@ contract GatewayEVMUpgradeTest is bytes32 public constant ASSET_HANDLER_ROLE = keccak256("ASSET_HANDLER_ROLE"); /// @notice New role identifier for pauser role. bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE"); + /// @notice Max size of payload + revertOptions revert message. + uint256 public constant MAX_PAYLOAD_SIZE = 1024; /// @custom:oz-upgrades-unsafe-allow constructor constructor() { @@ -76,6 +80,19 @@ contract GatewayEVMUpgradeTest is /// @param newImplementation Address of the new implementation. function _authorizeUpgrade(address newImplementation) internal override onlyRole(DEFAULT_ADMIN_ROLE) { } + /// @notice Update tss address + /// @param newTSSAddress new tss address + function updateTSSAddress(address newTSSAddress) external onlyRole(DEFAULT_ADMIN_ROLE) { + if (newTSSAddress == address(0)) revert ZeroAddress(); + + _revokeRole(TSS_ROLE, tssAddress); + _grantRole(TSS_ROLE, newTSSAddress); + + emit UpdatedGatewayTSSAddress(tssAddress, newTSSAddress); + + tssAddress = newTSSAddress; + } + /// @notice Pause contract. function pause() external onlyRole(PAUSER_ROLE) { _pause(); @@ -109,9 +126,9 @@ contract GatewayEVMUpgradeTest is emit Reverted(destination, address(0), msg.value, data, revertContext); } - /// @notice Executes a call to a destination address without ERC20 tokens. + /// @notice Executes an authenticated call to a destination address without ERC20 tokens. /// @dev This function can only be called by the TSS address and it is payable. - /// @param messageContext Message context containing sender and arbitrary call flag. + /// @param messageContext Message context containing sender. /// @param destination Address to call. /// @param data Calldata to pass to the call. /// @return The result of the call. @@ -129,30 +146,11 @@ contract GatewayEVMUpgradeTest is { if (destination == address(0)) revert ZeroAddress(); bytes memory result; - result = _executeAuthenticatedCall(messageContext, destination, data); - - emit Executed(destination, msg.value, data); - - return result; - } - - /// @notice Executes a call to a destination address without ERC20 tokens. - /// @dev This function can only be called by the TSS address and it is payable. - /// @param destination Address to call. - /// @param data Calldata to pass to the call. - /// @return The result of the call. - function execute( - address destination, - bytes calldata data - ) - external - payable - onlyRole(TSS_ROLE) - whenNotPaused - returns (bytes memory) - { - if (destination == address(0)) revert ZeroAddress(); - bytes memory result = _executeArbitraryCall(destination, data); + if (messageContext.sender == address(0)) { + result = _executeArbitraryCall(destination, data); + } else { + result = _executeAuthenticatedCall(messageContext, destination, data); + } emit ExecutedV2(destination, msg.value, data); @@ -162,11 +160,13 @@ contract GatewayEVMUpgradeTest is /// @notice Executes a call to a destination contract using ERC20 tokens. /// @dev This function can only be called by the custody or connector address. /// It uses the ERC20 allowance system, resetting gateway allowance at the end. + /// @param messageContext Message context containing sender. /// @param token Address of the ERC20 token. /// @param to Address of the contract to call. /// @param amount Amount of tokens to transfer. /// @param data Calldata to pass to the call. function executeWithERC20( + MessageContext calldata messageContext, address token, address to, uint256 amount, @@ -180,18 +180,22 @@ contract GatewayEVMUpgradeTest is if (amount == 0) revert InsufficientERC20Amount(); if (to == address(0)) revert ZeroAddress(); // Approve the target contract to spend the tokens - if (!resetApproval(token, to)) revert ApprovalFailed(); + if (!_resetApproval(token, to)) revert ApprovalFailed(); if (!IERC20(token).approve(to, amount)) revert ApprovalFailed(); // Execute the call on the target contract - _executeArbitraryCall(to, data); + if (messageContext.sender == address(0)) { + _executeArbitraryCall(to, data); + } else { + _executeAuthenticatedCall(messageContext, to, data); + } // Reset approval - if (!resetApproval(token, to)) revert ApprovalFailed(); + if (!_resetApproval(token, to)) revert ApprovalFailed(); // Transfer any remaining tokens back to the custody/connector contract uint256 remainingBalance = IERC20(token).balanceOf(address(this)); if (remainingBalance > 0) { - transferToAssetHandler(token, remainingBalance); + _transferToAssetHandler(token, remainingBalance); } emit ExecutedWithERC20(token, to, amount, data); @@ -239,6 +243,7 @@ contract GatewayEVMUpgradeTest is { if (msg.value == 0) revert InsufficientETHAmount(); if (receiver == address(0)) revert ZeroAddress(); + if (revertOptions.revertMessage.length > MAX_PAYLOAD_SIZE) revert PayloadSizeExceeded(); (bool deposited,) = tssAddress.call{ value: msg.value }(""); @@ -264,8 +269,9 @@ contract GatewayEVMUpgradeTest is { if (amount == 0) revert InsufficientERC20Amount(); if (receiver == address(0)) revert ZeroAddress(); + if (revertOptions.revertMessage.length > MAX_PAYLOAD_SIZE) revert PayloadSizeExceeded(); - transferFromToAssetHandler(msg.sender, asset, amount); + _transferFromToAssetHandler(msg.sender, asset, amount); emit Deposited(msg.sender, receiver, amount, asset, "", revertOptions); } @@ -286,6 +292,7 @@ contract GatewayEVMUpgradeTest is { if (msg.value == 0) revert InsufficientETHAmount(); if (receiver == address(0)) revert ZeroAddress(); + if (payload.length + revertOptions.revertMessage.length > MAX_PAYLOAD_SIZE) revert PayloadSizeExceeded(); (bool deposited,) = tssAddress.call{ value: msg.value }(""); @@ -313,8 +320,9 @@ contract GatewayEVMUpgradeTest is { if (amount == 0) revert InsufficientERC20Amount(); if (receiver == address(0)) revert ZeroAddress(); + if (payload.length + revertOptions.revertMessage.length > MAX_PAYLOAD_SIZE) revert PayloadSizeExceeded(); - transferFromToAssetHandler(msg.sender, asset, amount); + _transferFromToAssetHandler(msg.sender, asset, amount); emit Deposited(msg.sender, receiver, amount, asset, payload, revertOptions); } @@ -333,6 +341,8 @@ contract GatewayEVMUpgradeTest is nonReentrant { if (receiver == address(0)) revert ZeroAddress(); + if (payload.length + revertOptions.revertMessage.length > MAX_PAYLOAD_SIZE) revert PayloadSizeExceeded(); + emit Called(msg.sender, receiver, payload, revertOptions); } @@ -361,7 +371,7 @@ contract GatewayEVMUpgradeTest is /// @param token Address of the ERC20 token. /// @param to Address to reset the approval for. /// @return True if the approval reset was successful, false otherwise. - function resetApproval(address token, address to) private returns (bool) { + function _resetApproval(address token, address to) private returns (bool) { return IERC20(token).approve(to, 0); } @@ -371,15 +381,20 @@ contract GatewayEVMUpgradeTest is /// @param from Address of the sender. /// @param token Address of the ERC20 token. /// @param amount Amount of tokens to transfer. - function transferFromToAssetHandler(address from, address token, uint256 amount) private { + function _transferFromToAssetHandler(address from, address token, uint256 amount) private { if (token == zetaToken) { - // transfer to connector - // transfer amount to gateway - IERC20(token).safeTransferFrom(from, address(this), amount); - // approve connector to handle tokens depending on connector version (eg. lock or burn) - if (!IERC20(token).approve(zetaConnector, amount)) revert ApprovalFailed(); - // send tokens to connector - ZetaConnectorBase(zetaConnector).receiveTokens(amount); + // TODO: remove error and comment out code once ZETA supported back + // https://github.com/zeta-chain/protocol-contracts/issues/394 + // ZETA token is currently not supported for deposit + revert ZETANotSupported(); + + // // transfer to connector + // // transfer amount to gateway + // IERC20(token).safeTransferFrom(from, address(this), amount); + // // approve connector to handle tokens depending on connector version (eg. lock or burn) + // if (!IERC20(token).approve(zetaConnector, amount)) revert ApprovalFailed(); + // // send tokens to connector + // ZetaConnectorBase(zetaConnector).receiveTokens(amount); } else { // transfer to custody if (!IERC20Custody(custody).whitelisted(token)) revert NotWhitelistedInCustody(); @@ -392,7 +407,7 @@ contract GatewayEVMUpgradeTest is /// type. /// @param token Address of the ERC20 token. /// @param amount Amount of tokens to transfer. - function transferToAssetHandler(address token, uint256 amount) private { + function _transferToAssetHandler(address token, uint256 amount) private { if (token == zetaToken) { // transfer to connector // approve connector to handle tokens depending on connector version (eg. lock or burn) @@ -406,19 +421,19 @@ contract GatewayEVMUpgradeTest is } } - /// @dev Internal function to execute an arbitrary call to a destination address. + /// @dev Private function to execute an arbitrary call to a destination address. /// @param destination Address to call. /// @param data Calldata to pass to the call. /// @return The result of the call. - function _executeArbitraryCall(address destination, bytes calldata data) internal returns (bytes memory) { - revertIfAuthenticatedCall(data); + function _executeArbitraryCall(address destination, bytes calldata data) private returns (bytes memory) { + _revertIfOnCallOrOnRevert(data); (bool success, bytes memory result) = destination.call{ value: msg.value }(data); if (!success) revert ExecutionFailed(); return result; } - /// @dev Internal function to execute an authenticated call to a destination address. + /// @dev Private function to execute an authenticated call to a destination address. /// @param messageContext Message context containing sender and arbitrary call flag. /// @param destination Address to call. /// @param data Calldata to pass to the call. @@ -428,14 +443,14 @@ contract GatewayEVMUpgradeTest is address destination, bytes calldata data ) - internal + private returns (bytes memory) { return Callable(destination).onCall{ value: msg.value }(messageContext, data); } - // @dev prevent calling onCall function reserved for authenticated calls - function revertIfAuthenticatedCall(bytes calldata data) internal pure { + // @dev prevent spoofing onCall and onRevert functions + function _revertIfOnCallOrOnRevert(bytes calldata data) private pure { if (data.length >= 4) { bytes4 functionSelector; assembly { @@ -445,6 +460,10 @@ contract GatewayEVMUpgradeTest is if (functionSelector == Callable.onCall.selector) { revert NotAllowedToCallOnCall(); } + + if (functionSelector == Revertable.onRevert.selector) { + revert NotAllowedToCallOnRevert(); + } } } } diff --git a/v2/test/utils/upgrades/ZetaConnectorNativeUpgradeTest.sol b/v2/test/utils/upgrades/ZetaConnectorNativeUpgradeTest.sol index 0151a3ac..19ca229d 100644 --- a/v2/test/utils/upgrades/ZetaConnectorNativeUpgradeTest.sol +++ b/v2/test/utils/upgrades/ZetaConnectorNativeUpgradeTest.sol @@ -49,12 +49,14 @@ contract ZetaConnectorNativeUpgradeTest is ZetaConnectorBase { } /// @notice Withdraw tokens and call a contract through Gateway. + /// @param messageContext Message context containing sender. /// @param to The address to withdraw tokens to. /// @param amount The amount of tokens to withdraw. /// @param data The calldata to pass to the contract call. //// @param internalSendHash A hash used for internal tracking of the transaction. /// @dev This function can only be called by the TSS address. function withdrawAndCall( + MessageContext calldata messageContext, address to, uint256 amount, bytes calldata data, @@ -70,7 +72,7 @@ contract ZetaConnectorNativeUpgradeTest is ZetaConnectorBase { IERC20(zetaToken).safeTransfer(address(gateway), amount); // Forward the call to the Gateway contract - gateway.executeWithERC20(address(zetaToken), to, amount, data); + gateway.executeWithERC20(messageContext, address(zetaToken), to, amount, data); emit WithdrawnAndCalled(to, amount, data); } diff --git a/v2/test/utils/upgrades/ZetaConnectorNonNativeUpgradeTest.sol b/v2/test/utils/upgrades/ZetaConnectorNonNativeUpgradeTest.sol index adbec1f4..30838633 100644 --- a/v2/test/utils/upgrades/ZetaConnectorNonNativeUpgradeTest.sol +++ b/v2/test/utils/upgrades/ZetaConnectorNonNativeUpgradeTest.sol @@ -65,12 +65,14 @@ contract ZetaConnectorNonNativeUpgradeTest is ZetaConnectorBase { } /// @notice Withdraw tokens and call a contract through Gateway. + /// @param messageContext Message context containing sender. /// @param to The address to withdraw tokens to. /// @param amount The amount of tokens to withdraw. /// @param data The calldata to pass to the contract call. /// @param internalSendHash A hash used for internal tracking of the transaction. /// @dev This function can only be called by the TSS address, and mints if supply is not reached. function withdrawAndCall( + MessageContext calldata messageContext, address to, uint256 amount, bytes calldata data, @@ -86,7 +88,7 @@ contract ZetaConnectorNonNativeUpgradeTest is ZetaConnectorBase { _mintTo(address(gateway), amount, internalSendHash); // Forward the call to the Gateway contract - gateway.executeWithERC20(address(zetaToken), to, amount, data); + gateway.executeWithERC20(messageContext, address(zetaToken), to, amount, data); emit WithdrawnAndCalled(to, amount, data); } @@ -127,7 +129,7 @@ contract ZetaConnectorNonNativeUpgradeTest is ZetaConnectorBase { } /// @dev mints to provided account and checks if totalSupply will be exceeded - function _mintTo(address to, uint256 amount, bytes32 internalSendHash) internal { + function _mintTo(address to, uint256 amount, bytes32 internalSendHash) private { if (amount + IERC20(zetaToken).totalSupply() > maxSupply) revert ExceedsMaxSupply(); IZetaNonEthNew(zetaToken).mint(address(to), amount, internalSendHash); } diff --git a/v2/types/ERC20Custody.ts b/v2/types/ERC20Custody.ts index 82cb6886..04e0b06a 100644 --- a/v2/types/ERC20Custody.ts +++ b/v2/types/ERC20Custody.ts @@ -23,6 +23,10 @@ import type { TypedContractMethod, } from "./common"; +export type MessageContextStruct = { sender: AddressLike }; + +export type MessageContextStructOutput = [sender: string] & { sender: string }; + export type RevertContextStruct = { sender: AddressLike; asset: AddressLike; @@ -187,7 +191,13 @@ export interface ERC20CustodyInterface extends Interface { ): string; encodeFunctionData( functionFragment: "withdrawAndCall", - values: [AddressLike, AddressLike, BigNumberish, BytesLike] + values: [ + MessageContextStruct, + AddressLike, + AddressLike, + BigNumberish, + BytesLike + ] ): string; encodeFunctionData( functionFragment: "withdrawAndRevert", @@ -672,6 +682,7 @@ export interface ERC20Custody extends BaseContract { withdrawAndCall: TypedContractMethod< [ + messageContext: MessageContextStruct, to: AddressLike, token: AddressLike, amount: BigNumberish, @@ -819,6 +830,7 @@ export interface ERC20Custody extends BaseContract { nameOrSignature: "withdrawAndCall" ): TypedContractMethod< [ + messageContext: MessageContextStruct, to: AddressLike, token: AddressLike, amount: BigNumberish, diff --git a/v2/types/ERC20CustodyUpgradeTest.ts b/v2/types/ERC20CustodyUpgradeTest.ts index 6eba3034..c58fdf4c 100644 --- a/v2/types/ERC20CustodyUpgradeTest.ts +++ b/v2/types/ERC20CustodyUpgradeTest.ts @@ -23,6 +23,10 @@ import type { TypedContractMethod, } from "./common"; +export type MessageContextStruct = { sender: AddressLike }; + +export type MessageContextStructOutput = [sender: string] & { sender: string }; + export type RevertContextStruct = { sender: AddressLike; asset: AddressLike; @@ -188,7 +192,13 @@ export interface ERC20CustodyUpgradeTestInterface extends Interface { ): string; encodeFunctionData( functionFragment: "withdrawAndCall", - values: [AddressLike, AddressLike, BigNumberish, BytesLike] + values: [ + MessageContextStruct, + AddressLike, + AddressLike, + BigNumberish, + BytesLike + ] ): string; encodeFunctionData( functionFragment: "withdrawAndRevert", @@ -691,6 +701,7 @@ export interface ERC20CustodyUpgradeTest extends BaseContract { withdrawAndCall: TypedContractMethod< [ + messageContext: MessageContextStruct, to: AddressLike, token: AddressLike, amount: BigNumberish, @@ -838,6 +849,7 @@ export interface ERC20CustodyUpgradeTest extends BaseContract { nameOrSignature: "withdrawAndCall" ): TypedContractMethod< [ + messageContext: MessageContextStruct, to: AddressLike, token: AddressLike, amount: BigNumberish, diff --git a/v2/types/GatewayEVM.ts b/v2/types/GatewayEVM.ts index 80c9453c..e4047326 100644 --- a/v2/types/GatewayEVM.ts +++ b/v2/types/GatewayEVM.ts @@ -78,8 +78,7 @@ export interface GatewayEVMInterface extends Interface { | "deposit(address,(address,bool,address,bytes,uint256))" | "depositAndCall(address,bytes,(address,bool,address,bytes,uint256))" | "depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))" - | "execute(address,bytes)" - | "execute((address),address,bytes)" + | "execute" | "executeRevert" | "executeWithERC20" | "getRoleAdmin" @@ -169,11 +168,7 @@ export interface GatewayEVMInterface extends Interface { ] ): string; encodeFunctionData( - functionFragment: "execute(address,bytes)", - values: [AddressLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "execute((address),address,bytes)", + functionFragment: "execute", values: [MessageContextStruct, AddressLike, BytesLike] ): string; encodeFunctionData( @@ -182,7 +177,13 @@ export interface GatewayEVMInterface extends Interface { ): string; encodeFunctionData( functionFragment: "executeWithERC20", - values: [AddressLike, AddressLike, BigNumberish, BytesLike] + values: [ + MessageContextStruct, + AddressLike, + AddressLike, + BigNumberish, + BytesLike + ] ): string; encodeFunctionData( functionFragment: "getRoleAdmin", @@ -294,14 +295,7 @@ export interface GatewayEVMInterface extends Interface { functionFragment: "depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "execute(address,bytes)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "execute((address),address,bytes)", - data: BytesLike - ): Result; + decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; decodeFunctionResult( functionFragment: "executeRevert", data: BytesLike @@ -713,13 +707,7 @@ export interface GatewayEVM extends BaseContract { "nonpayable" >; - "execute(address,bytes)": TypedContractMethod< - [destination: AddressLike, data: BytesLike], - [string], - "payable" - >; - - "execute((address),address,bytes)": TypedContractMethod< + execute: TypedContractMethod< [ messageContext: MessageContextStruct, destination: AddressLike, @@ -741,6 +729,7 @@ export interface GatewayEVM extends BaseContract { executeWithERC20: TypedContractMethod< [ + messageContext: MessageContextStruct, token: AddressLike, to: AddressLike, amount: BigNumberish, @@ -918,14 +907,7 @@ export interface GatewayEVM extends BaseContract { "nonpayable" >; getFunction( - nameOrSignature: "execute(address,bytes)" - ): TypedContractMethod< - [destination: AddressLike, data: BytesLike], - [string], - "payable" - >; - getFunction( - nameOrSignature: "execute((address),address,bytes)" + nameOrSignature: "execute" ): TypedContractMethod< [ messageContext: MessageContextStruct, @@ -950,6 +932,7 @@ export interface GatewayEVM extends BaseContract { nameOrSignature: "executeWithERC20" ): TypedContractMethod< [ + messageContext: MessageContextStruct, token: AddressLike, to: AddressLike, amount: BigNumberish, diff --git a/v2/types/GatewayEVMUpgradeTest.ts b/v2/types/GatewayEVMUpgradeTest.ts index 19a73469..57cd7d47 100644 --- a/v2/types/GatewayEVMUpgradeTest.ts +++ b/v2/types/GatewayEVMUpgradeTest.ts @@ -68,6 +68,7 @@ export interface GatewayEVMUpgradeTestInterface extends Interface { nameOrSignature: | "ASSET_HANDLER_ROLE" | "DEFAULT_ADMIN_ROLE" + | "MAX_PAYLOAD_SIZE" | "PAUSER_ROLE" | "TSS_ROLE" | "UPGRADE_INTERFACE_VERSION" @@ -77,8 +78,7 @@ export interface GatewayEVMUpgradeTestInterface extends Interface { | "deposit(address,(address,bool,address,bytes,uint256))" | "depositAndCall(address,bytes,(address,bool,address,bytes,uint256))" | "depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))" - | "execute(address,bytes)" - | "execute((address),address,bytes)" + | "execute" | "executeRevert" | "executeWithERC20" | "getRoleAdmin" @@ -96,6 +96,7 @@ export interface GatewayEVMUpgradeTestInterface extends Interface { | "supportsInterface" | "tssAddress" | "unpause" + | "updateTSSAddress" | "upgradeToAndCall" | "zetaConnector" | "zetaToken" @@ -127,6 +128,10 @@ export interface GatewayEVMUpgradeTestInterface extends Interface { functionFragment: "DEFAULT_ADMIN_ROLE", values?: undefined ): string; + encodeFunctionData( + functionFragment: "MAX_PAYLOAD_SIZE", + values?: undefined + ): string; encodeFunctionData( functionFragment: "PAUSER_ROLE", values?: undefined @@ -164,11 +169,7 @@ export interface GatewayEVMUpgradeTestInterface extends Interface { ] ): string; encodeFunctionData( - functionFragment: "execute(address,bytes)", - values: [AddressLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "execute((address),address,bytes)", + functionFragment: "execute", values: [MessageContextStruct, AddressLike, BytesLike] ): string; encodeFunctionData( @@ -177,7 +178,13 @@ export interface GatewayEVMUpgradeTestInterface extends Interface { ): string; encodeFunctionData( functionFragment: "executeWithERC20", - values: [AddressLike, AddressLike, BigNumberish, BytesLike] + values: [ + MessageContextStruct, + AddressLike, + AddressLike, + BigNumberish, + BytesLike + ] ): string; encodeFunctionData( functionFragment: "getRoleAdmin", @@ -236,6 +243,10 @@ export interface GatewayEVMUpgradeTestInterface extends Interface { values?: undefined ): string; encodeFunctionData(functionFragment: "unpause", values?: undefined): string; + encodeFunctionData( + functionFragment: "updateTSSAddress", + values: [AddressLike] + ): string; encodeFunctionData( functionFragment: "upgradeToAndCall", values: [AddressLike, BytesLike] @@ -254,6 +265,10 @@ export interface GatewayEVMUpgradeTestInterface extends Interface { functionFragment: "DEFAULT_ADMIN_ROLE", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "MAX_PAYLOAD_SIZE", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "PAUSER_ROLE", data: BytesLike @@ -281,14 +296,7 @@ export interface GatewayEVMUpgradeTestInterface extends Interface { functionFragment: "depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "execute(address,bytes)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "execute((address),address,bytes)", - data: BytesLike - ): Result; + decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; decodeFunctionResult( functionFragment: "executeRevert", data: BytesLike @@ -330,6 +338,10 @@ export interface GatewayEVMUpgradeTestInterface extends Interface { ): Result; decodeFunctionResult(functionFragment: "tssAddress", data: BytesLike): Result; decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result; + decodeFunctionResult( + functionFragment: "updateTSSAddress", + data: BytesLike + ): Result; decodeFunctionResult( functionFragment: "upgradeToAndCall", data: BytesLike @@ -655,6 +667,8 @@ export interface GatewayEVMUpgradeTest extends BaseContract { DEFAULT_ADMIN_ROLE: TypedContractMethod<[], [string], "view">; + MAX_PAYLOAD_SIZE: TypedContractMethod<[], [bigint], "view">; + PAUSER_ROLE: TypedContractMethod<[], [string], "view">; TSS_ROLE: TypedContractMethod<[], [string], "view">; @@ -712,13 +726,7 @@ export interface GatewayEVMUpgradeTest extends BaseContract { "nonpayable" >; - "execute(address,bytes)": TypedContractMethod< - [destination: AddressLike, data: BytesLike], - [string], - "payable" - >; - - "execute((address),address,bytes)": TypedContractMethod< + execute: TypedContractMethod< [ messageContext: MessageContextStruct, destination: AddressLike, @@ -740,6 +748,7 @@ export interface GatewayEVMUpgradeTest extends BaseContract { executeWithERC20: TypedContractMethod< [ + messageContext: MessageContextStruct, token: AddressLike, to: AddressLike, amount: BigNumberish, @@ -821,6 +830,12 @@ export interface GatewayEVMUpgradeTest extends BaseContract { unpause: TypedContractMethod<[], [void], "nonpayable">; + updateTSSAddress: TypedContractMethod< + [newTSSAddress: AddressLike], + [void], + "nonpayable" + >; + upgradeToAndCall: TypedContractMethod< [newImplementation: AddressLike, data: BytesLike], [void], @@ -841,6 +856,9 @@ export interface GatewayEVMUpgradeTest extends BaseContract { getFunction( nameOrSignature: "DEFAULT_ADMIN_ROLE" ): TypedContractMethod<[], [string], "view">; + getFunction( + nameOrSignature: "MAX_PAYLOAD_SIZE" + ): TypedContractMethod<[], [bigint], "view">; getFunction( nameOrSignature: "PAUSER_ROLE" ): TypedContractMethod<[], [string], "view">; @@ -908,14 +926,7 @@ export interface GatewayEVMUpgradeTest extends BaseContract { "nonpayable" >; getFunction( - nameOrSignature: "execute(address,bytes)" - ): TypedContractMethod< - [destination: AddressLike, data: BytesLike], - [string], - "payable" - >; - getFunction( - nameOrSignature: "execute((address),address,bytes)" + nameOrSignature: "execute" ): TypedContractMethod< [ messageContext: MessageContextStruct, @@ -940,6 +951,7 @@ export interface GatewayEVMUpgradeTest extends BaseContract { nameOrSignature: "executeWithERC20" ): TypedContractMethod< [ + messageContext: MessageContextStruct, token: AddressLike, to: AddressLike, amount: BigNumberish, @@ -1023,6 +1035,9 @@ export interface GatewayEVMUpgradeTest extends BaseContract { getFunction( nameOrSignature: "unpause" ): TypedContractMethod<[], [void], "nonpayable">; + getFunction( + nameOrSignature: "updateTSSAddress" + ): TypedContractMethod<[newTSSAddress: AddressLike], [void], "nonpayable">; getFunction( nameOrSignature: "upgradeToAndCall" ): TypedContractMethod< diff --git a/v2/types/IERC20Custody.sol/IERC20Custody.ts b/v2/types/IERC20Custody.sol/IERC20Custody.ts index eada4997..d2fbc17b 100644 --- a/v2/types/IERC20Custody.sol/IERC20Custody.ts +++ b/v2/types/IERC20Custody.sol/IERC20Custody.ts @@ -23,6 +23,10 @@ import type { TypedContractMethod, } from "../common"; +export type MessageContextStruct = { sender: AddressLike }; + +export type MessageContextStructOutput = [sender: string] & { sender: string }; + export type RevertContextStruct = { sender: AddressLike; asset: AddressLike; @@ -67,7 +71,13 @@ export interface IERC20CustodyInterface extends Interface { ): string; encodeFunctionData( functionFragment: "withdrawAndCall", - values: [AddressLike, AddressLike, BigNumberish, BytesLike] + values: [ + MessageContextStruct, + AddressLike, + AddressLike, + BigNumberish, + BytesLike + ] ): string; encodeFunctionData( functionFragment: "withdrawAndRevert", @@ -284,6 +294,7 @@ export interface IERC20Custody extends BaseContract { withdrawAndCall: TypedContractMethod< [ + messageContext: MessageContextStruct, token: AddressLike, to: AddressLike, amount: BigNumberish, @@ -323,6 +334,7 @@ export interface IERC20Custody extends BaseContract { nameOrSignature: "withdrawAndCall" ): TypedContractMethod< [ + messageContext: MessageContextStruct, token: AddressLike, to: AddressLike, amount: BigNumberish, diff --git a/v2/types/IGatewayEVM.sol/IGatewayEVM.ts b/v2/types/IGatewayEVM.sol/IGatewayEVM.ts index 561d61e8..260e807a 100644 --- a/v2/types/IGatewayEVM.sol/IGatewayEVM.ts +++ b/v2/types/IGatewayEVM.sol/IGatewayEVM.ts @@ -71,8 +71,7 @@ export interface IGatewayEVMInterface extends Interface { | "deposit(address,(address,bool,address,bytes,uint256))" | "depositAndCall(address,bytes,(address,bool,address,bytes,uint256))" | "depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))" - | "execute(address,bytes)" - | "execute((address),address,bytes)" + | "execute" | "executeRevert" | "executeWithERC20" | "revertWithERC20" @@ -115,11 +114,7 @@ export interface IGatewayEVMInterface extends Interface { ] ): string; encodeFunctionData( - functionFragment: "execute(address,bytes)", - values: [AddressLike, BytesLike] - ): string; - encodeFunctionData( - functionFragment: "execute((address),address,bytes)", + functionFragment: "execute", values: [MessageContextStruct, AddressLike, BytesLike] ): string; encodeFunctionData( @@ -128,7 +123,13 @@ export interface IGatewayEVMInterface extends Interface { ): string; encodeFunctionData( functionFragment: "executeWithERC20", - values: [AddressLike, AddressLike, BigNumberish, BytesLike] + values: [ + MessageContextStruct, + AddressLike, + AddressLike, + BigNumberish, + BytesLike + ] ): string; encodeFunctionData( functionFragment: "revertWithERC20", @@ -158,14 +159,7 @@ export interface IGatewayEVMInterface extends Interface { functionFragment: "depositAndCall(address,uint256,address,bytes,(address,bool,address,bytes,uint256))", data: BytesLike ): Result; - decodeFunctionResult( - functionFragment: "execute(address,bytes)", - data: BytesLike - ): Result; - decodeFunctionResult( - functionFragment: "execute((address),address,bytes)", - data: BytesLike - ): Result; + decodeFunctionResult(functionFragment: "execute", data: BytesLike): Result; decodeFunctionResult( functionFragment: "executeRevert", data: BytesLike @@ -415,13 +409,7 @@ export interface IGatewayEVM extends BaseContract { "nonpayable" >; - "execute(address,bytes)": TypedContractMethod< - [destination: AddressLike, data: BytesLike], - [string], - "payable" - >; - - "execute((address),address,bytes)": TypedContractMethod< + execute: TypedContractMethod< [ messageContext: MessageContextStruct, destination: AddressLike, @@ -443,6 +431,7 @@ export interface IGatewayEVM extends BaseContract { executeWithERC20: TypedContractMethod< [ + messageContext: MessageContextStruct, token: AddressLike, to: AddressLike, amount: BigNumberish, @@ -523,14 +512,7 @@ export interface IGatewayEVM extends BaseContract { "nonpayable" >; getFunction( - nameOrSignature: "execute(address,bytes)" - ): TypedContractMethod< - [destination: AddressLike, data: BytesLike], - [string], - "payable" - >; - getFunction( - nameOrSignature: "execute((address),address,bytes)" + nameOrSignature: "execute" ): TypedContractMethod< [ messageContext: MessageContextStruct, @@ -555,6 +537,7 @@ export interface IGatewayEVM extends BaseContract { nameOrSignature: "executeWithERC20" ): TypedContractMethod< [ + messageContext: MessageContextStruct, token: AddressLike, to: AddressLike, amount: BigNumberish, diff --git a/v2/types/IReceiverEVM.sol/IReceiverEVMEvents.ts b/v2/types/IReceiverEVM.sol/IReceiverEVMEvents.ts index dcaae5e3..777e3e5e 100644 --- a/v2/types/IReceiverEVM.sol/IReceiverEVMEvents.ts +++ b/v2/types/IReceiverEVM.sol/IReceiverEVMEvents.ts @@ -110,9 +110,12 @@ export namespace ReceivedNonPayableEvent { } export namespace ReceivedOnCallEvent { - export type InputTuple = []; - export type OutputTuple = []; - export interface OutputObject {} + export type InputTuple = [sender: AddressLike, message: BytesLike]; + export type OutputTuple = [sender: string, message: string]; + export interface OutputObject { + sender: string; + message: string; + } export type Event = TypedContractEvent; export type Filter = TypedDeferredTopicFilter; export type Log = TypedEventLog; @@ -290,7 +293,7 @@ export interface IReceiverEVMEvents extends BaseContract { ReceivedNonPayableEvent.OutputObject >; - "ReceivedOnCall()": TypedContractEvent< + "ReceivedOnCall(address,bytes)": TypedContractEvent< ReceivedOnCallEvent.InputTuple, ReceivedOnCallEvent.OutputTuple, ReceivedOnCallEvent.OutputObject diff --git a/v2/types/ReceiverEVM.ts b/v2/types/ReceiverEVM.ts index 8497bf77..4e7ae548 100644 --- a/v2/types/ReceiverEVM.ts +++ b/v2/types/ReceiverEVM.ts @@ -179,9 +179,12 @@ export namespace ReceivedNonPayableEvent { } export namespace ReceivedOnCallEvent { - export type InputTuple = []; - export type OutputTuple = []; - export interface OutputObject {} + export type InputTuple = [sender: AddressLike, message: BytesLike]; + export type OutputTuple = [sender: string, message: string]; + export interface OutputObject { + sender: string; + message: string; + } export type Event = TypedContractEvent; export type Filter = TypedDeferredTopicFilter; export type Log = TypedEventLog; @@ -279,7 +282,7 @@ export interface ReceiverEVM extends BaseContract { ): Promise; onCall: TypedContractMethod< - [arg0: MessageContextStruct, arg1: BytesLike], + [messageContext: MessageContextStruct, message: BytesLike], [string], "payable" >; @@ -323,7 +326,7 @@ export interface ReceiverEVM extends BaseContract { getFunction( nameOrSignature: "onCall" ): TypedContractMethod< - [arg0: MessageContextStruct, arg1: BytesLike], + [messageContext: MessageContextStruct, message: BytesLike], [string], "payable" >; @@ -443,7 +446,7 @@ export interface ReceiverEVM extends BaseContract { ReceivedNonPayableEvent.OutputObject >; - "ReceivedOnCall()": TypedContractEvent< + "ReceivedOnCall(address,bytes)": TypedContractEvent< ReceivedOnCallEvent.InputTuple, ReceivedOnCallEvent.OutputTuple, ReceivedOnCallEvent.OutputObject diff --git a/v2/types/ZetaConnectorBase.ts b/v2/types/ZetaConnectorBase.ts index 65d10193..77765b47 100644 --- a/v2/types/ZetaConnectorBase.ts +++ b/v2/types/ZetaConnectorBase.ts @@ -23,6 +23,10 @@ import type { TypedContractMethod, } from "./common"; +export type MessageContextStruct = { sender: AddressLike }; + +export type MessageContextStructOutput = [sender: string] & { sender: string }; + export type RevertContextStruct = { sender: AddressLike; asset: AddressLike; @@ -157,7 +161,13 @@ export interface ZetaConnectorBaseInterface extends Interface { ): string; encodeFunctionData( functionFragment: "withdrawAndCall", - values: [AddressLike, BigNumberish, BytesLike, BytesLike] + values: [ + MessageContextStruct, + AddressLike, + BigNumberish, + BytesLike, + BytesLike + ] ): string; encodeFunctionData( functionFragment: "withdrawAndRevert", @@ -549,6 +559,7 @@ export interface ZetaConnectorBase extends BaseContract { withdrawAndCall: TypedContractMethod< [ + messageContext: MessageContextStruct, to: AddressLike, amount: BigNumberish, data: BytesLike, @@ -679,6 +690,7 @@ export interface ZetaConnectorBase extends BaseContract { nameOrSignature: "withdrawAndCall" ): TypedContractMethod< [ + messageContext: MessageContextStruct, to: AddressLike, amount: BigNumberish, data: BytesLike, diff --git a/v2/types/ZetaConnectorNative.ts b/v2/types/ZetaConnectorNative.ts index ea04ccf2..ecd4ef82 100644 --- a/v2/types/ZetaConnectorNative.ts +++ b/v2/types/ZetaConnectorNative.ts @@ -23,6 +23,10 @@ import type { TypedContractMethod, } from "./common"; +export type MessageContextStruct = { sender: AddressLike }; + +export type MessageContextStructOutput = [sender: string] & { sender: string }; + export type RevertContextStruct = { sender: AddressLike; asset: AddressLike; @@ -157,7 +161,13 @@ export interface ZetaConnectorNativeInterface extends Interface { ): string; encodeFunctionData( functionFragment: "withdrawAndCall", - values: [AddressLike, BigNumberish, BytesLike, BytesLike] + values: [ + MessageContextStruct, + AddressLike, + BigNumberish, + BytesLike, + BytesLike + ] ): string; encodeFunctionData( functionFragment: "withdrawAndRevert", @@ -548,7 +558,13 @@ export interface ZetaConnectorNative extends BaseContract { >; withdrawAndCall: TypedContractMethod< - [to: AddressLike, amount: BigNumberish, data: BytesLike, arg3: BytesLike], + [ + messageContext: MessageContextStruct, + to: AddressLike, + amount: BigNumberish, + data: BytesLike, + arg4: BytesLike + ], [void], "nonpayable" >; @@ -673,7 +689,13 @@ export interface ZetaConnectorNative extends BaseContract { getFunction( nameOrSignature: "withdrawAndCall" ): TypedContractMethod< - [to: AddressLike, amount: BigNumberish, data: BytesLike, arg3: BytesLike], + [ + messageContext: MessageContextStruct, + to: AddressLike, + amount: BigNumberish, + data: BytesLike, + arg4: BytesLike + ], [void], "nonpayable" >; diff --git a/v2/types/ZetaConnectorNativeUpgradeTest.ts b/v2/types/ZetaConnectorNativeUpgradeTest.ts index 851d562d..91ef1e55 100644 --- a/v2/types/ZetaConnectorNativeUpgradeTest.ts +++ b/v2/types/ZetaConnectorNativeUpgradeTest.ts @@ -23,6 +23,10 @@ import type { TypedContractMethod, } from "./common"; +export type MessageContextStruct = { sender: AddressLike }; + +export type MessageContextStructOutput = [sender: string] & { sender: string }; + export type RevertContextStruct = { sender: AddressLike; asset: AddressLike; @@ -158,7 +162,13 @@ export interface ZetaConnectorNativeUpgradeTestInterface extends Interface { ): string; encodeFunctionData( functionFragment: "withdrawAndCall", - values: [AddressLike, BigNumberish, BytesLike, BytesLike] + values: [ + MessageContextStruct, + AddressLike, + BigNumberish, + BytesLike, + BytesLike + ] ): string; encodeFunctionData( functionFragment: "withdrawAndRevert", @@ -562,7 +572,13 @@ export interface ZetaConnectorNativeUpgradeTest extends BaseContract { >; withdrawAndCall: TypedContractMethod< - [to: AddressLike, amount: BigNumberish, data: BytesLike, arg3: BytesLike], + [ + messageContext: MessageContextStruct, + to: AddressLike, + amount: BigNumberish, + data: BytesLike, + arg4: BytesLike + ], [void], "nonpayable" >; @@ -687,7 +703,13 @@ export interface ZetaConnectorNativeUpgradeTest extends BaseContract { getFunction( nameOrSignature: "withdrawAndCall" ): TypedContractMethod< - [to: AddressLike, amount: BigNumberish, data: BytesLike, arg3: BytesLike], + [ + messageContext: MessageContextStruct, + to: AddressLike, + amount: BigNumberish, + data: BytesLike, + arg4: BytesLike + ], [void], "nonpayable" >; diff --git a/v2/types/ZetaConnectorNonNative.ts b/v2/types/ZetaConnectorNonNative.ts index 9c6a0137..ba65cddb 100644 --- a/v2/types/ZetaConnectorNonNative.ts +++ b/v2/types/ZetaConnectorNonNative.ts @@ -23,6 +23,10 @@ import type { TypedContractMethod, } from "./common"; +export type MessageContextStruct = { sender: AddressLike }; + +export type MessageContextStructOutput = [sender: string] & { sender: string }; + export type RevertContextStruct = { sender: AddressLike; asset: AddressLike; @@ -165,7 +169,13 @@ export interface ZetaConnectorNonNativeInterface extends Interface { ): string; encodeFunctionData( functionFragment: "withdrawAndCall", - values: [AddressLike, BigNumberish, BytesLike, BytesLike] + values: [ + MessageContextStruct, + AddressLike, + BigNumberish, + BytesLike, + BytesLike + ] ): string; encodeFunctionData( functionFragment: "withdrawAndRevert", @@ -582,6 +592,7 @@ export interface ZetaConnectorNonNative extends BaseContract { withdrawAndCall: TypedContractMethod< [ + messageContext: MessageContextStruct, to: AddressLike, amount: BigNumberish, data: BytesLike, @@ -718,6 +729,7 @@ export interface ZetaConnectorNonNative extends BaseContract { nameOrSignature: "withdrawAndCall" ): TypedContractMethod< [ + messageContext: MessageContextStruct, to: AddressLike, amount: BigNumberish, data: BytesLike, diff --git a/v2/types/ZetaConnectorNonNativeUpgradeTest.ts b/v2/types/ZetaConnectorNonNativeUpgradeTest.ts index fa2235a8..efba4917 100644 --- a/v2/types/ZetaConnectorNonNativeUpgradeTest.ts +++ b/v2/types/ZetaConnectorNonNativeUpgradeTest.ts @@ -23,6 +23,10 @@ import type { TypedContractMethod, } from "./common"; +export type MessageContextStruct = { sender: AddressLike }; + +export type MessageContextStructOutput = [sender: string] & { sender: string }; + export type RevertContextStruct = { sender: AddressLike; asset: AddressLike; @@ -166,7 +170,13 @@ export interface ZetaConnectorNonNativeUpgradeTestInterface extends Interface { ): string; encodeFunctionData( functionFragment: "withdrawAndCall", - values: [AddressLike, BigNumberish, BytesLike, BytesLike] + values: [ + MessageContextStruct, + AddressLike, + BigNumberish, + BytesLike, + BytesLike + ] ): string; encodeFunctionData( functionFragment: "withdrawAndRevert", @@ -596,6 +606,7 @@ export interface ZetaConnectorNonNativeUpgradeTest extends BaseContract { withdrawAndCall: TypedContractMethod< [ + messageContext: MessageContextStruct, to: AddressLike, amount: BigNumberish, data: BytesLike, @@ -732,6 +743,7 @@ export interface ZetaConnectorNonNativeUpgradeTest extends BaseContract { nameOrSignature: "withdrawAndCall" ): TypedContractMethod< [ + messageContext: MessageContextStruct, to: AddressLike, amount: BigNumberish, data: BytesLike, diff --git a/v2/types/factories/ERC20CustodyUpgradeTest__factory.ts b/v2/types/factories/ERC20CustodyUpgradeTest__factory.ts index a8b7d746..49241c0f 100644 --- a/v2/types/factories/ERC20CustodyUpgradeTest__factory.ts +++ b/v2/types/factories/ERC20CustodyUpgradeTest__factory.ts @@ -442,6 +442,18 @@ const _abi = [ type: "function", name: "withdrawAndCall", inputs: [ + { + name: "messageContext", + type: "tuple", + internalType: "struct MessageContext", + components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, + ], + }, { name: "to", type: "address", @@ -998,7 +1010,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a060405230608052348015601357600080fd5b5060805161295861003d60003960008181611928015281816119510152611b2701526129586000f3fe6080604052600436106101c25760003560e01c806385f438c1116100f7578063ad3cb1cc11610095578063d9caed1211610064578063d9caed12146105f6578063e609055e14610616578063e63ab1e914610636578063eab103df1461066a57600080fd5b8063ad3cb1cc14610530578063c0c53b8b14610586578063d547741f146105a6578063d936547e146105c657600080fd5b806399a3c356116100d157806399a3c356146104bb5780639a590427146104db5780639b19251a146104fb578063a217fddf1461051b57600080fd5b806385f438c11461040257806391d1485414610436578063950837aa1461049b57600080fd5b80633f4ba83a11610164578063570618e11161013e578063570618e1146103625780635b112591146103965780635c975abb146103b65780638456cb59146103ed57600080fd5b80633f4ba83a146103255780634f1ef2861461033a57806352d1902d1461034d57600080fd5b8063248a9ca3116101a0578063248a9ca314610256578063252f07bf146102b35780632f2ff15d146102e557806336568abe1461030557600080fd5b806301ffc9a7146101c7578063116191b6146101fc57806321fc65f214610234575b600080fd5b3480156101d357600080fd5b506101e76101e236600461216e565b61068a565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b5060005461021c906001600160a01b031681565b6040516001600160a01b0390911681526020016101f3565b34801561024057600080fd5b5061025461024f36600461220e565b610723565b005b34801561026257600080fd5b506102a5610271366004612281565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101f3565b3480156102bf57600080fd5b506002546101e79074010000000000000000000000000000000000000000900460ff1681565b3480156102f157600080fd5b5061025461030036600461229a565b6108cc565b34801561031157600080fd5b5061025461032036600461229a565b610916565b34801561033157600080fd5b50610254610967565b6102546103483660046122f9565b61099c565b34801561035957600080fd5b506102a56109bb565b34801561036e57600080fd5b506102a57f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b3480156103a257600080fd5b5060025461021c906001600160a01b031681565b3480156103c257600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101e7565b3480156103f957600080fd5b506102546109ea565b34801561040e57600080fd5b506102a57f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561044257600080fd5b506101e761045136600461229a565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104a757600080fd5b506102546104b6366004612402565b610a1c565b3480156104c757600080fd5b506102546104d636600461241f565b610ba1565b3480156104e757600080fd5b506102546104f6366004612402565b610d4f565b34801561050757600080fd5b50610254610516366004612402565b610e03565b34801561052757600080fd5b506102a5600081565b34801561053c57600080fd5b506105796040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101f391906124e6565b34801561059257600080fd5b506102546105a1366004612537565b610ebd565b3480156105b257600080fd5b506102546105c136600461229a565b6111b7565b3480156105d257600080fd5b506101e76105e1366004612402565b60016020526000908152604090205460ff1681565b34801561060257600080fd5b50610254610611366004612582565b6111fb565b34801561062257600080fd5b506102546106313660046125c3565b611312565b34801561064257600080fd5b506102a57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561067657600080fd5b50610254610685366004612662565b61155d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061071d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61072b6115b3565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461075581611634565b61075d61163e565b6001600160a01b03851660009081526001602052604090205460ff166107af576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546107c9906001600160a01b0387811691168661169c565b6000546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690635131ab599061081a9088908a908990899089906004016126c8565b600060405180830381600087803b15801561083457600080fd5b505af1158015610848573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d58686866040516108939392919061270b565b60405180910390a3506108c560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461090681611634565b6109108383611736565b50505050565b6001600160a01b0381163314610958576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109628282611805565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61099181611634565b6109996118ab565b50565b6109a461191d565b6109ad826119ed565b6109b782826119f8565b5050565b60006109c5611b1c565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a1481611634565b610999611b7e565b6000610a2781611634565b6001600160a01b038216610a67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610a9e907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b0316611805565b50600254610ad6907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b0316611805565b50610b017f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483611736565b50610b2c7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a83611736565b50600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040805182815260208101929092527f4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6910160405180910390a15050565b610ba96115b3565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610bd381611634565b610bdb61163e565b6001600160a01b03861660009081526001602052604090205460ff16610c2d576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610c47906001600160a01b0388811691168761169c565b6000546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063aa0c0fc190610c9a9089908b908a908a908a908a906004016127da565b600060405180830381600087803b158015610cb457600080fd5b505af1158015610cc8573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f7b53ec10a80164e60591c43d9c222e9354886981b880a3fba19c9ceb77fb972187878787604051610d159493929190612831565b60405180910390a350610d4760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610d7981611634565b6001600160a01b038216610db9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260016020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610e2d81611634565b6001600160a01b038216610e6d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000818152600160208190526040808320805460ff1916909217909155517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610f085750825b905060008267ffffffffffffffff166001148015610f255750303b155b905081158015610f33575080155b15610f6a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610fcb5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0388161580610fe857506001600160a01b038716155b80610ffa57506001600160a01b038616155b15611031576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611039611bd9565b611041611be1565b611049611bd9565b611051611bf1565b600080546001600160a01b03808b167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617835560028054918b169190921617905561109f9087611736565b506110ca7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611736565b506110f57f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e488611736565b506111207f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a87611736565b5061114b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a88611736565b5083156111ad5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111f181611634565b6109108383611805565b6112036115b3565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461122d81611634565b61123561163e565b6001600160a01b03831660009081526001602052604090205460ff16611287576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61129b6001600160a01b038416858461169c565b826001600160a01b0316846001600160a01b03167fd4dabfe72081670cc78f2ebda8e2eddaf3feebde6288dcb8fe673b3dc201b5a4846040516112e091815260200190565b60405180910390a35061096260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61131a6115b3565b61132261163e565b60025474010000000000000000000000000000000000000000900460ff16611376576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526001602052604090205460ff166113c8576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611428573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144c919061285d565b90506114636001600160a01b038616333087611c01565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa1580156114ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150e919061285d565b6115189190612876565b878760405161152b9594939291906128b0565b60405180910390a250610d4760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b600061156881611634565b506002805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0161162e576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6109998133611c3a565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561169a576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261096291859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611cc7565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166117fb576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556117b13390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061071d565b600091505061071d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156117fb576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061071d565b6118b3611d43565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806119b657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166119aa7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561169a576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109b781611634565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a70575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611a6d9181019061285d565b60015b611ab6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611b12576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611aad565b6109628383611d9e565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461169a576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b8661163e565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336118ff565b61169a611df4565b611be9611df4565b61169a611e5b565b611bf9611df4565b61169a611e63565b6040516001600160a01b0384811660248301528381166044830152606482018390526109109186918216906323b872dd906084016116c9565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166109b7576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611aad565b6000611cdc6001600160a01b03841683611e96565b90508051600014158015611d01575080806020019051810190611cff91906128e9565b155b15610962576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611aad565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661169a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611da782611eab565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611dec576109628282611f53565b6109b7611fc9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661169a576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611710611df4565b611e6b611df4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff19169055565b6060611ea483836000612001565b9392505050565b806001600160a01b03163b600003611efa576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611aad565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611f709190612906565b600060405180830381855af49150503d8060008114611fab576040519150601f19603f3d011682016040523d82523d6000602084013e611fb0565b606091505b5091509150611fc08583836120b7565b95945050505050565b341561169a576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608147101561203f576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611aad565b600080856001600160a01b0316848660405161205b9190612906565b60006040518083038185875af1925050503d8060008114612098576040519150601f19603f3d011682016040523d82523d6000602084013e61209d565b606091505b50915091506120ad8683836120b7565b9695505050505050565b6060826120cc576120c78261212c565b611ea4565b81511580156120e357506001600160a01b0384163b155b15612125576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611aad565b5080611ea4565b80511561213c5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561218057600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611ea457600080fd5b6001600160a01b038116811461099957600080fd5b60008083601f8401126121d757600080fd5b50813567ffffffffffffffff8111156121ef57600080fd5b60208301915083602082850101111561220757600080fd5b9250929050565b60008060008060006080868803121561222657600080fd5b8535612231816121b0565b94506020860135612241816121b0565b935060408601359250606086013567ffffffffffffffff81111561226457600080fd5b612270888289016121c5565b969995985093965092949392505050565b60006020828403121561229357600080fd5b5035919050565b600080604083850312156122ad57600080fd5b8235915060208301356122bf816121b0565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561230c57600080fd5b8235612317816121b0565b9150602083013567ffffffffffffffff81111561233357600080fd5b8301601f8101851361234457600080fd5b803567ffffffffffffffff81111561235e5761235e6122ca565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156123ca576123ca6122ca565b6040528181528282016020018710156123e257600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561241457600080fd5b8135611ea4816121b0565b60008060008060008060a0878903121561243857600080fd5b8635612443816121b0565b95506020870135612453816121b0565b945060408701359350606087013567ffffffffffffffff81111561247657600080fd5b61248289828a016121c5565b909450925050608087013567ffffffffffffffff8111156124a257600080fd5b87016080818a0312156124b457600080fd5b809150509295509295509295565b60005b838110156124dd5781810151838201526020016124c5565b50506000910152565b60208152600082518060208401526125058160408501602087016124c2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008060006060848603121561254c57600080fd5b8335612557816121b0565b92506020840135612567816121b0565b91506040840135612577816121b0565b809150509250925092565b60008060006060848603121561259757600080fd5b83356125a2816121b0565b925060208401356125b2816121b0565b929592945050506040919091013590565b600080600080600080608087890312156125dc57600080fd5b863567ffffffffffffffff8111156125f357600080fd5b6125ff89828a016121c5565b9097509550506020870135612613816121b0565b935060408701359250606087013567ffffffffffffffff81111561263657600080fd5b61264289828a016121c5565b979a9699509497509295939492505050565b801515811461099957600080fd5b60006020828403121561267457600080fd5b8135611ea481612654565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061270060808301848661267f565b979650505050505050565b838152604060208201526000611fc060408301848661267f565b60008135612732816121b0565b6001600160a01b03168352602082013561274b816121b0565b6001600160a01b03166020840152604082810135908401526060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261279957600080fd5b820160208101903567ffffffffffffffff8111156127b657600080fd5b8036038213156127c557600080fd5b60806060860152611fc060808601828461267f565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061281260a08301858761267f565b82810360808401526128248185612725565b9998505050505050505050565b84815260606020820152600061284b60608301858761267f565b82810360408401526127008185612725565b60006020828403121561286f57600080fd5b5051919050565b8181038181111561071d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006128c460608301878961267f565b85602084015282810360408401526128dd81858761267f565b98975050505050505050565b6000602082840312156128fb57600080fd5b8151611ea481612654565b600082516129188184602087016124c2565b919091019291505056fea26469706673582212209677fb20584c2da2d9821bbbc7955ade138c175013e15534e533f173d0e2389c64736f6c634300081a0033"; + "0x60a060405230608052348015601357600080fd5b5060805161296f61003d600039600081816117b1015281816117da01526119b2015261296f6000f3fe6080604052600436106101c25760003560e01c806391d14854116100f7578063ad3cb1cc11610095578063d9caed1211610064578063d9caed12146105f6578063e609055e14610616578063e63ab1e914610636578063eab103df1461066a57600080fd5b8063ad3cb1cc14610530578063c0c53b8b14610586578063d547741f146105a6578063d936547e146105c657600080fd5b80639a590427116100d15780639a590427146104bb5780639b19251a146104db578063a217fddf146104fb578063ad0818521461051057600080fd5b806391d1485414610416578063950837aa1461047b57806399a3c3561461049b57600080fd5b80634f1ef286116101645780635b1125911161013e5780635b112591146103765780635c975abb146103965780638456cb59146103cd57806385f438c1146103e257600080fd5b80634f1ef2861461031a57806352d1902d1461032d578063570618e11461034257600080fd5b8063252f07bf116101a0578063252f07bf146102915780632f2ff15d146102c357806336568abe146102e55780633f4ba83a1461030557600080fd5b806301ffc9a7146101c7578063116191b6146101fc578063248a9ca314610234575b600080fd5b3480156101d357600080fd5b506101e76101e2366004612170565b61068a565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b5060005461021c906001600160a01b031681565b6040516001600160a01b0390911681526020016101f3565b34801561024057600080fd5b5061028361024f3660046121b2565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101f3565b34801561029d57600080fd5b506002546101e79074010000000000000000000000000000000000000000900460ff1681565b3480156102cf57600080fd5b506102e36102de3660046121e0565b610723565b005b3480156102f157600080fd5b506102e36103003660046121e0565b61076d565b34801561031157600080fd5b506102e36107be565b6102e361032836600461223f565b6107f3565b34801561033957600080fd5b50610283610812565b34801561034e57600080fd5b506102837f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b34801561038257600080fd5b5060025461021c906001600160a01b031681565b3480156103a257600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101e7565b3480156103d957600080fd5b506102e3610841565b3480156103ee57600080fd5b506102837f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561042257600080fd5b506101e76104313660046121e0565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561048757600080fd5b506102e3610496366004612348565b610873565b3480156104a757600080fd5b506102e36104b63660046123ae565b610a06565b3480156104c757600080fd5b506102e36104d6366004612348565b610bb4565b3480156104e757600080fd5b506102e36104f6366004612348565b610c68565b34801561050757600080fd5b50610283600081565b34801561051c57600080fd5b506102e361052b366004612451565b610d22565b34801561053c57600080fd5b506105796040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101f39190612500565b34801561059257600080fd5b506102e36105a1366004612551565b610e94565b3480156105b257600080fd5b506102e36105c13660046121e0565b6111b9565b3480156105d257600080fd5b506101e76105e1366004612348565b60016020526000908152604090205460ff1681565b34801561060257600080fd5b506102e361061136600461259c565b6111fd565b34801561062257600080fd5b506102e36106313660046125dd565b611314565b34801561064257600080fd5b506102837f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561067657600080fd5b506102e361068536600461265e565b61155f565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061071d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461075d816115b5565b61076783836115bf565b50505050565b6001600160a01b03811633146107af576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b9828261168e565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107e8816115b5565b6107f0611734565b50565b6107fb6117a6565b61080482611878565b61080e8282611883565b5050565b600061081c6119a7565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61086b816115b5565b6107f0611a09565b600061087e816115b5565b6001600160a01b0382166108be576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546108f5907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b031661168e565b5060025461092d907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b031661168e565b506109587f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836115bf565b506109837f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a836115bf565b50600254604080516001600160a01b03928316815291841660208301527f4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b610a0e611a64565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a38816115b5565b610a40611ae5565b6001600160a01b03861660009081526001602052604090205460ff16610a92576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610aac906001600160a01b03888116911687611b41565b6000546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063aa0c0fc190610aff9089908b908a908a908a908a90600401612779565b600060405180830381600087803b158015610b1957600080fd5b505af1158015610b2d573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f7b53ec10a80164e60591c43d9c222e9354886981b880a3fba19c9ceb77fb972187878787604051610b7a94939291906127d0565b60405180910390a350610bac60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610bde816115b5565b6001600160a01b038216610c1e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260016020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610c92816115b5565b6001600160a01b038216610cd2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000818152600160208190526040808320805460ff1916909217909155517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b610d2a611a64565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d54816115b5565b610d5c611ae5565b6001600160a01b03851660009081526001602052604090205460ff16610dae576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610dc8906001600160a01b03878116911686611b41565b6000546040517f7bbe9afa0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690637bbe9afa90610e1b908a9089908b908a908a908a90600401612807565b600060405180830381600087803b158015610e3557600080fd5b505af1158015610e49573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d5868686604051610b7a93929190612866565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610edf5750825b905060008267ffffffffffffffff166001148015610efc5750303b155b905081158015610f0a575080155b15610f41576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610fa25784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0388161580610fbf57506001600160a01b038716155b80610fd157506001600160a01b038616155b15611008576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611010611bdb565b611018611be3565b611020611bdb565b611028611bf3565b600080546001600160a01b03808b167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617835560028054918b169190921617905561107690876115bf565b506110a17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876115bf565b506110cc7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a886115bf565b506110f77f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4886115bf565b506111227f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a876115bf565b5061114d7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a886115bf565b5083156111af5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111f3816115b5565b610767838361168e565b611205611a64565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461122f816115b5565b611237611ae5565b6001600160a01b03831660009081526001602052604090205460ff16611289576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61129d6001600160a01b0384168584611b41565b826001600160a01b0316846001600160a01b03167fd4dabfe72081670cc78f2ebda8e2eddaf3feebde6288dcb8fe673b3dc201b5a4846040516112e291815260200190565b60405180910390a3506107b960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61131c611a64565b611324611ae5565b60025474010000000000000000000000000000000000000000900460ff16611378576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526001602052604090205460ff166113ca576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa15801561142a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144e9190612880565b90506114656001600160a01b038616333087611c03565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa1580156114ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115109190612880565b61151a9190612899565b878760405161152d9594939291906128d3565b60405180910390a250610bac60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b600061156a816115b5565b506002805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6107f08133611c3c565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611684576000848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561163a3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061071d565b600091505061071d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611684576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061071d565b61173c611cc9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061183f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166118337f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611876576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600061080e816115b5565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156118fb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526118f891810190612880565b60015b611941576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461199d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611938565b6107b98383611d24565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611876576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a11611ae5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611788565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611adf576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611876576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038381166024830152604482018390526107b991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611d7a565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611876611df6565b611beb611df6565b611876611e5d565b611bfb611df6565b611876611e65565b6040516001600160a01b0384811660248301528381166044830152606482018390526107679186918216906323b872dd90608401611b6e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff1661080e576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611938565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611876576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d2d82611e98565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611d72576107b98282611f40565b61080e611fb6565b6000611d8f6001600160a01b03841683611fee565b90508051600014158015611db4575080806020019051810190611db29190612900565b155b156107b9576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611938565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611876576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bb5611df6565b611e6d611df6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff19169055565b806001600160a01b03163b600003611ee7576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611938565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611f5d919061291d565b600060405180830381855af49150503d8060008114611f98576040519150601f19603f3d011682016040523d82523d6000602084013e611f9d565b606091505b5091509150611fad858383612003565b95945050505050565b3415611876576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611ffc83836000612078565b9392505050565b606082612018576120138261212e565b611ffc565b815115801561202f57506001600160a01b0384163b155b15612071576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611938565b5092915050565b6060814710156120b6576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611938565b600080856001600160a01b031684866040516120d2919061291d565b60006040518083038185875af1925050503d806000811461210f576040519150601f19603f3d011682016040523d82523d6000602084013e612114565b606091505b5091509150612124868383612003565b9695505050505050565b80511561213e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561218257600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611ffc57600080fd5b6000602082840312156121c457600080fd5b5035919050565b6001600160a01b03811681146107f057600080fd5b600080604083850312156121f357600080fd5b823591506020830135612205816121cb565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561225257600080fd5b823561225d816121cb565b9150602083013567ffffffffffffffff81111561227957600080fd5b8301601f8101851361228a57600080fd5b803567ffffffffffffffff8111156122a4576122a4612210565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561231057612310612210565b60405281815282820160200187101561232857600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561235a57600080fd5b8135611ffc816121cb565b60008083601f84011261237757600080fd5b50813567ffffffffffffffff81111561238f57600080fd5b6020830191508360208285010111156123a757600080fd5b9250929050565b60008060008060008060a087890312156123c757600080fd5b86356123d2816121cb565b955060208701356123e2816121cb565b945060408701359350606087013567ffffffffffffffff81111561240557600080fd5b61241189828a01612365565b909450925050608087013567ffffffffffffffff81111561243157600080fd5b87016080818a03121561244357600080fd5b809150509295509295509295565b60008060008060008086880360a081121561246b57600080fd5b602081121561247957600080fd5b50869550602087013561248b816121cb565b9450604087013561249b816121cb565b935060608701359250608087013567ffffffffffffffff8111156124be57600080fd5b6124ca89828a01612365565b979a9699509497509295939492505050565b60005b838110156124f75781810151838201526020016124df565b50506000910152565b602081526000825180602084015261251f8160408501602087016124dc565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008060006060848603121561256657600080fd5b8335612571816121cb565b92506020840135612581816121cb565b91506040840135612591816121cb565b809150509250925092565b6000806000606084860312156125b157600080fd5b83356125bc816121cb565b925060208401356125cc816121cb565b929592945050506040919091013590565b600080600080600080608087890312156125f657600080fd5b863567ffffffffffffffff81111561260d57600080fd5b61261989828a01612365565b909750955050602087013561262d816121cb565b935060408701359250606087013567ffffffffffffffff8111156124be57600080fd5b80151581146107f057600080fd5b60006020828403121561267057600080fd5b8135611ffc81612650565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600081356126d1816121cb565b6001600160a01b0316835260208201356126ea816121cb565b6001600160a01b03166020840152604082810135908401526060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261273857600080fd5b820160208101903567ffffffffffffffff81111561275557600080fd5b80360382131561276457600080fd5b60806060860152611fad60808601828461267b565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006127b160a08301858761267b565b82810360808401526127c381856126c4565b9998505050505050505050565b8481526060602082015260006127ea60608301858761267b565b82810360408401526127fc81856126c4565b979650505050505050565b60008735612814816121cb565b6001600160a01b0381168352506001600160a01b03871660208301526001600160a01b038616604083015284606083015260a0608083015261285a60a08301848661267b565b98975050505050505050565b838152604060208201526000611fad60408301848661267b565b60006020828403121561289257600080fd5b5051919050565b8181038181111561071d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006128e760608301878961267b565b856020840152828103604084015261285a81858761267b565b60006020828403121561291257600080fd5b8151611ffc81612650565b6000825161292f8184602087016124dc565b919091019291505056fea264697066735822122082fc33619f8a24e2eb588ffede50fc6f7277dd5d48bbf779d9fb55b026629eed64736f6c634300081a0033"; type ERC20CustodyUpgradeTestConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/ERC20Custody__factory.ts b/v2/types/factories/ERC20Custody__factory.ts index 8048c93f..6b76893f 100644 --- a/v2/types/factories/ERC20Custody__factory.ts +++ b/v2/types/factories/ERC20Custody__factory.ts @@ -439,6 +439,18 @@ const _abi = [ type: "function", name: "withdrawAndCall", inputs: [ + { + name: "messageContext", + type: "tuple", + internalType: "struct MessageContext", + components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, + ], + }, { name: "to", type: "address", @@ -970,7 +982,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a060405230608052348015601357600080fd5b5060805161299161003d600039600081816119610152818161198a0152611b6001526129916000f3fe6080604052600436106101c25760003560e01c806385f438c1116100f7578063ad3cb1cc11610095578063d9caed1211610064578063d9caed12146105f6578063e609055e14610616578063e63ab1e914610636578063eab103df1461066a57600080fd5b8063ad3cb1cc14610530578063c0c53b8b14610586578063d547741f146105a6578063d936547e146105c657600080fd5b806399a3c356116100d157806399a3c356146104bb5780639a590427146104db5780639b19251a146104fb578063a217fddf1461051b57600080fd5b806385f438c11461040257806391d1485414610436578063950837aa1461049b57600080fd5b80633f4ba83a11610164578063570618e11161013e578063570618e1146103625780635b112591146103965780635c975abb146103b65780638456cb59146103ed57600080fd5b80633f4ba83a146103255780634f1ef2861461033a57806352d1902d1461034d57600080fd5b8063248a9ca3116101a0578063248a9ca314610256578063252f07bf146102b35780632f2ff15d146102e557806336568abe1461030557600080fd5b806301ffc9a7146101c7578063116191b6146101fc57806321fc65f214610234575b600080fd5b3480156101d357600080fd5b506101e76101e23660046121a7565b61068a565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b5060005461021c906001600160a01b031681565b6040516001600160a01b0390911681526020016101f3565b34801561024057600080fd5b5061025461024f366004612247565b610723565b005b34801561026257600080fd5b506102a56102713660046122ba565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101f3565b3480156102bf57600080fd5b506002546101e79074010000000000000000000000000000000000000000900460ff1681565b3480156102f157600080fd5b506102546103003660046122d3565b6108cc565b34801561031157600080fd5b506102546103203660046122d3565b610916565b34801561033157600080fd5b50610254610967565b610254610348366004612332565b61099c565b34801561035957600080fd5b506102a56109bb565b34801561036e57600080fd5b506102a57f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b3480156103a257600080fd5b5060025461021c906001600160a01b031681565b3480156103c257600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101e7565b3480156103f957600080fd5b506102546109ea565b34801561040e57600080fd5b506102a57f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561044257600080fd5b506101e76104513660046122d3565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104a757600080fd5b506102546104b636600461243b565b610a1c565b3480156104c757600080fd5b506102546104d6366004612458565b610baf565b3480156104e757600080fd5b506102546104f636600461243b565b610d5d565b34801561050757600080fd5b5061025461051636600461243b565b610e11565b34801561052757600080fd5b506102a5600081565b34801561053c57600080fd5b506105796040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101f3919061251f565b34801561059257600080fd5b506102546105a1366004612570565b610ecb565b3480156105b257600080fd5b506102546105c13660046122d3565b6111f0565b3480156105d257600080fd5b506101e76105e136600461243b565b60016020526000908152604090205460ff1681565b34801561060257600080fd5b506102546106113660046125bb565b611234565b34801561062257600080fd5b506102546106313660046125fc565b61134b565b34801561064257600080fd5b506102a57f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561067657600080fd5b5061025461068536600461269b565b611596565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061071d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61072b6115ec565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46107558161166d565b61075d611677565b6001600160a01b03851660009081526001602052604090205460ff166107af576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546107c9906001600160a01b038781169116866116d5565b6000546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690635131ab599061081a9088908a90899089908990600401612701565b600060405180830381600087803b15801561083457600080fd5b505af1158015610848573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d586868660405161089393929190612744565b60405180910390a3506108c560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546109068161166d565b610910838361176f565b50505050565b6001600160a01b0381163314610958576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610962828261183e565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109918161166d565b6109996118e4565b50565b6109a4611956565b6109ad82611a26565b6109b78282611a31565b5050565b60006109c5611b55565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a148161166d565b610999611bb7565b6000610a278161166d565b6001600160a01b038216610a67576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610a9e907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b031661183e565b50600254610ad6907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b031661183e565b50610b017f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361176f565b50610b2c7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a8361176f565b50600254604080516001600160a01b03928316815291841660208301527f4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b610bb76115ec565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610be18161166d565b610be9611677565b6001600160a01b03861660009081526001602052604090205460ff16610c3b576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610c55906001600160a01b038881169116876116d5565b6000546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063aa0c0fc190610ca89089908b908a908a908a908a90600401612813565b600060405180830381600087803b158015610cc257600080fd5b505af1158015610cd6573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f7b53ec10a80164e60591c43d9c222e9354886981b880a3fba19c9ceb77fb972187878787604051610d23949392919061286a565b60405180910390a350610d5560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610d878161166d565b6001600160a01b038216610dc7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260016020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610e3b8161166d565b6001600160a01b038216610e7b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000818152600160208190526040808320805460ff1916909217909155517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610f165750825b905060008267ffffffffffffffff166001148015610f335750303b155b905081158015610f41575080155b15610f78576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610fd95784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0388161580610ff657506001600160a01b038716155b8061100857506001600160a01b038616155b1561103f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611047611c12565b61104f611c1a565b611057611c12565b61105f611c2a565b600080546001600160a01b03808b167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617835560028054918b16919092161790556110ad908761176f565b506110d87f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8761176f565b506111037f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8861176f565b5061112e7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48861176f565b506111597f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a8761176f565b506111847f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a8861176f565b5083156111e65784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461122a8161166d565b610910838361183e565b61123c6115ec565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46112668161166d565b61126e611677565b6001600160a01b03831660009081526001602052604090205460ff166112c0576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112d46001600160a01b03841685846116d5565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb8460405161131991815260200190565b60405180910390a35061096260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6113536115ec565b61135b611677565b60025474010000000000000000000000000000000000000000900460ff166113af576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526001602052604090205460ff16611401576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015611461573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114859190612896565b905061149c6001600160a01b038616333087611c3a565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190612896565b61155191906128af565b87876040516115649594939291906128e9565b60405180910390a250610d5560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60006115a18161166d565b506002805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611667576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6109998133611c73565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156116d3576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261096291859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611d00565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611834576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556117ea3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061071d565b600091505061071d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611834576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061071d565b6118ec611d7c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806119ef57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166119e37f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156116d3576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109b78161166d565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611aa9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611aa691810190612896565b60015b611aef576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611b4b576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611ae6565b6109628383611dd7565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116d3576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bbf611677565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611938565b6116d3611e2d565b611c22611e2d565b6116d3611e94565b611c32611e2d565b6116d3611e9c565b6040516001600160a01b0384811660248301528381166044830152606482018390526109109186918216906323b872dd90608401611702565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166109b7576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611ae6565b6000611d156001600160a01b03841683611ecf565b90508051600014158015611d3a575080806020019051810190611d389190612922565b155b15610962576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611ae6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166116d3576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611de082611ee4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611e25576109628282611f8c565b6109b7612002565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166116d3576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611749611e2d565b611ea4611e2d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff19169055565b6060611edd8383600061203a565b9392505050565b806001600160a01b03163b600003611f33576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611ae6565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611fa9919061293f565b600060405180830381855af49150503d8060008114611fe4576040519150601f19603f3d011682016040523d82523d6000602084013e611fe9565b606091505b5091509150611ff98583836120f0565b95945050505050565b34156116d3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081471015612078576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611ae6565b600080856001600160a01b03168486604051612094919061293f565b60006040518083038185875af1925050503d80600081146120d1576040519150601f19603f3d011682016040523d82523d6000602084013e6120d6565b606091505b50915091506120e68683836120f0565b9695505050505050565b6060826121055761210082612165565b611edd565b815115801561211c57506001600160a01b0384163b155b1561215e576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611ae6565b5080611edd565b8051156121755780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156121b957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611edd57600080fd5b6001600160a01b038116811461099957600080fd5b60008083601f84011261221057600080fd5b50813567ffffffffffffffff81111561222857600080fd5b60208301915083602082850101111561224057600080fd5b9250929050565b60008060008060006080868803121561225f57600080fd5b853561226a816121e9565b9450602086013561227a816121e9565b935060408601359250606086013567ffffffffffffffff81111561229d57600080fd5b6122a9888289016121fe565b969995985093965092949392505050565b6000602082840312156122cc57600080fd5b5035919050565b600080604083850312156122e657600080fd5b8235915060208301356122f8816121e9565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561234557600080fd5b8235612350816121e9565b9150602083013567ffffffffffffffff81111561236c57600080fd5b8301601f8101851361237d57600080fd5b803567ffffffffffffffff81111561239757612397612303565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561240357612403612303565b60405281815282820160200187101561241b57600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561244d57600080fd5b8135611edd816121e9565b60008060008060008060a0878903121561247157600080fd5b863561247c816121e9565b9550602087013561248c816121e9565b945060408701359350606087013567ffffffffffffffff8111156124af57600080fd5b6124bb89828a016121fe565b909450925050608087013567ffffffffffffffff8111156124db57600080fd5b87016080818a0312156124ed57600080fd5b809150509295509295509295565b60005b838110156125165781810151838201526020016124fe565b50506000910152565b602081526000825180602084015261253e8160408501602087016124fb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008060006060848603121561258557600080fd5b8335612590816121e9565b925060208401356125a0816121e9565b915060408401356125b0816121e9565b809150509250925092565b6000806000606084860312156125d057600080fd5b83356125db816121e9565b925060208401356125eb816121e9565b929592945050506040919091013590565b6000806000806000806080878903121561261557600080fd5b863567ffffffffffffffff81111561262c57600080fd5b61263889828a016121fe565b909750955050602087013561264c816121e9565b935060408701359250606087013567ffffffffffffffff81111561266f57600080fd5b61267b89828a016121fe565b979a9699509497509295939492505050565b801515811461099957600080fd5b6000602082840312156126ad57600080fd5b8135611edd8161268d565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b03851660208201528360408201526080606082015260006127396080830184866126b8565b979650505050505050565b838152604060208201526000611ff96040830184866126b8565b6000813561276b816121e9565b6001600160a01b031683526020820135612784816121e9565b6001600160a01b03166020840152604082810135908401526060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126127d257600080fd5b820160208101903567ffffffffffffffff8111156127ef57600080fd5b8036038213156127fe57600080fd5b60806060860152611ff96080860182846126b8565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061284b60a0830185876126b8565b828103608084015261285d818561275e565b9998505050505050505050565b8481526060602082015260006128846060830185876126b8565b8281036040840152612739818561275e565b6000602082840312156128a857600080fd5b5051919050565b8181038181111561071d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006128fd6060830187896126b8565b85602084015282810360408401526129168185876126b8565b98975050505050505050565b60006020828403121561293457600080fd5b8151611edd8161268d565b600082516129518184602087016124fb565b919091019291505056fea264697066735822122032725bd2b7dce3e2ae6a3b0195af5832fc237f7d832025eeb8bb10b9c42be63964736f6c634300081a0033"; + "0x60a060405230608052348015601357600080fd5b5060805161296f61003d600039600081816117b1015281816117da01526119b2015261296f6000f3fe6080604052600436106101c25760003560e01c806391d14854116100f7578063ad3cb1cc11610095578063d9caed1211610064578063d9caed12146105f6578063e609055e14610616578063e63ab1e914610636578063eab103df1461066a57600080fd5b8063ad3cb1cc14610530578063c0c53b8b14610586578063d547741f146105a6578063d936547e146105c657600080fd5b80639a590427116100d15780639a590427146104bb5780639b19251a146104db578063a217fddf146104fb578063ad0818521461051057600080fd5b806391d1485414610416578063950837aa1461047b57806399a3c3561461049b57600080fd5b80634f1ef286116101645780635b1125911161013e5780635b112591146103765780635c975abb146103965780638456cb59146103cd57806385f438c1146103e257600080fd5b80634f1ef2861461031a57806352d1902d1461032d578063570618e11461034257600080fd5b8063252f07bf116101a0578063252f07bf146102915780632f2ff15d146102c357806336568abe146102e55780633f4ba83a1461030557600080fd5b806301ffc9a7146101c7578063116191b6146101fc578063248a9ca314610234575b600080fd5b3480156101d357600080fd5b506101e76101e2366004612170565b61068a565b60405190151581526020015b60405180910390f35b34801561020857600080fd5b5060005461021c906001600160a01b031681565b6040516001600160a01b0390911681526020016101f3565b34801561024057600080fd5b5061028361024f3660046121b2565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101f3565b34801561029d57600080fd5b506002546101e79074010000000000000000000000000000000000000000900460ff1681565b3480156102cf57600080fd5b506102e36102de3660046121e0565b610723565b005b3480156102f157600080fd5b506102e36103003660046121e0565b61076d565b34801561031157600080fd5b506102e36107be565b6102e361032836600461223f565b6107f3565b34801561033957600080fd5b50610283610812565b34801561034e57600080fd5b506102837f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a81565b34801561038257600080fd5b5060025461021c906001600160a01b031681565b3480156103a257600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101e7565b3480156103d957600080fd5b506102e3610841565b3480156103ee57600080fd5b506102837f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561042257600080fd5b506101e76104313660046121e0565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561048757600080fd5b506102e3610496366004612348565b610873565b3480156104a757600080fd5b506102e36104b63660046123ae565b610a06565b3480156104c757600080fd5b506102e36104d6366004612348565b610bb4565b3480156104e757600080fd5b506102e36104f6366004612348565b610c68565b34801561050757600080fd5b50610283600081565b34801561051c57600080fd5b506102e361052b366004612451565b610d22565b34801561053c57600080fd5b506105796040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101f39190612500565b34801561059257600080fd5b506102e36105a1366004612551565b610e94565b3480156105b257600080fd5b506102e36105c13660046121e0565b6111b9565b3480156105d257600080fd5b506101e76105e1366004612348565b60016020526000908152604090205460ff1681565b34801561060257600080fd5b506102e361061136600461259c565b6111fd565b34801561062257600080fd5b506102e36106313660046125dd565b611314565b34801561064257600080fd5b506102837f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561067657600080fd5b506102e361068536600461265e565b61155f565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061071d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461075d816115b5565b61076783836115bf565b50505050565b6001600160a01b03811633146107af576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107b9828261168e565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107e8816115b5565b6107f0611734565b50565b6107fb6117a6565b61080482611878565b61080e8282611883565b5050565b600061081c6119a7565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61086b816115b5565b6107f0611a09565b600061087e816115b5565b6001600160a01b0382166108be576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546108f5907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b031661168e565b5060025461092d907f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a906001600160a01b031661168e565b506109587f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836115bf565b506109837f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a836115bf565b50600254604080516001600160a01b03928316815291841660208301527f4d3470c839d3c4dd664eec934b920c12fe0966e3185103dd40149496815df2b6910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b610a0e611a64565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a38816115b5565b610a40611ae5565b6001600160a01b03861660009081526001602052604090205460ff16610a92576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610aac906001600160a01b03888116911687611b41565b6000546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063aa0c0fc190610aff9089908b908a908a908a908a90600401612779565b600060405180830381600087803b158015610b1957600080fd5b505af1158015610b2d573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f7b53ec10a80164e60591c43d9c222e9354886981b880a3fba19c9ceb77fb972187878787604051610b7a94939291906127d0565b60405180910390a350610bac60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610bde816115b5565b6001600160a01b038216610c1e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600081815260016020526040808220805460ff19169055517f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da467919190a25050565b7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a610c92816115b5565b6001600160a01b038216610cd2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166000818152600160208190526040808320805460ff1916909217909155517faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a549190a25050565b610d2a611a64565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610d54816115b5565b610d5c611ae5565b6001600160a01b03851660009081526001602052604090205460ff16610dae576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610dc8906001600160a01b03878116911686611b41565b6000546040517f7bbe9afa0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690637bbe9afa90610e1b908a9089908b908a908a908a90600401612807565b600060405180830381600087803b158015610e3557600080fd5b505af1158015610e49573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167f6478cbb6e28c0823c691dfd74c01c985634faddd4c401b990fe4ec26277ea8d5868686604051610b7a93929190612866565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610edf5750825b905060008267ffffffffffffffff166001148015610efc5750303b155b905081158015610f0a575080155b15610f41576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610fa25784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b0388161580610fbf57506001600160a01b038716155b80610fd157506001600160a01b038616155b15611008576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611010611bdb565b611018611be3565b611020611bdb565b611028611bf3565b600080546001600160a01b03808b167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617835560028054918b169190921617905561107690876115bf565b506110a17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876115bf565b506110cc7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a886115bf565b506110f77f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4886115bf565b506111227f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a876115bf565b5061114d7f8619cecd8b9e095ab43867f5b69d492180450fe862e6b50bfbfb24b75dd84c8a886115bf565b5083156111af5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111f3816115b5565b610767838361168e565b611205611a64565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461122f816115b5565b611237611ae5565b6001600160a01b03831660009081526001602052604090205460ff16611289576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61129d6001600160a01b0384168584611b41565b826001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb846040516112e291815260200190565b60405180910390a3506107b960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61131c611a64565b611324611ae5565b60025474010000000000000000000000000000000000000000900460ff16611378576040517f73cba66300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526001602052604090205460ff166113ca576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa15801561142a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144e9190612880565b90506114656001600160a01b038616333087611c03565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038616907f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae9089908990859085906370a0823190602401602060405180830381865afa1580156114ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115109190612880565b61151a9190612899565b878760405161152d9594939291906128d3565b60405180910390a250610bac60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b600061156a816115b5565b506002805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6107f08133611c3c565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611684576000848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561163a3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061071d565b600091505061071d565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611684576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061071d565b61173c611cc9565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061183f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166118337f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611876576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600061080e816115b5565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156118fb575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526118f891810190612880565b60015b611941576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc811461199d576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611938565b6107b98383611d24565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611876576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a11611ae5565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611788565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611adf576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611876576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b038381166024830152604482018390526107b991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611d7a565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611876611df6565b611beb611df6565b611876611e5d565b611bfb611df6565b611876611e65565b6040516001600160a01b0384811660248301528381166044830152606482018390526107679186918216906323b872dd90608401611b6e565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff1661080e576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401611938565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611876576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d2d82611e98565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611d72576107b98282611f40565b61080e611fb6565b6000611d8f6001600160a01b03841683611fee565b90508051600014158015611db4575080806020019051810190611db29190612900565b155b156107b9576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611938565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611876576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bb5611df6565b611e6d611df6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff19169055565b806001600160a01b03163b600003611ee7576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611938565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611f5d919061291d565b600060405180830381855af49150503d8060008114611f98576040519150601f19603f3d011682016040523d82523d6000602084013e611f9d565b606091505b5091509150611fad858383612003565b95945050505050565b3415611876576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060611ffc83836000612078565b9392505050565b606082612018576120138261212e565b611ffc565b815115801561202f57506001600160a01b0384163b155b15612071576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611938565b5092915050565b6060814710156120b6576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611938565b600080856001600160a01b031684866040516120d2919061291d565b60006040518083038185875af1925050503d806000811461210f576040519150601f19603f3d011682016040523d82523d6000602084013e612114565b606091505b5091509150612124868383612003565b9695505050505050565b80511561213e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561218257600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611ffc57600080fd5b6000602082840312156121c457600080fd5b5035919050565b6001600160a01b03811681146107f057600080fd5b600080604083850312156121f357600080fd5b823591506020830135612205816121cb565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806040838503121561225257600080fd5b823561225d816121cb565b9150602083013567ffffffffffffffff81111561227957600080fd5b8301601f8101851361228a57600080fd5b803567ffffffffffffffff8111156122a4576122a4612210565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561231057612310612210565b60405281815282820160200187101561232857600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561235a57600080fd5b8135611ffc816121cb565b60008083601f84011261237757600080fd5b50813567ffffffffffffffff81111561238f57600080fd5b6020830191508360208285010111156123a757600080fd5b9250929050565b60008060008060008060a087890312156123c757600080fd5b86356123d2816121cb565b955060208701356123e2816121cb565b945060408701359350606087013567ffffffffffffffff81111561240557600080fd5b61241189828a01612365565b909450925050608087013567ffffffffffffffff81111561243157600080fd5b87016080818a03121561244357600080fd5b809150509295509295509295565b60008060008060008086880360a081121561246b57600080fd5b602081121561247957600080fd5b50869550602087013561248b816121cb565b9450604087013561249b816121cb565b935060608701359250608087013567ffffffffffffffff8111156124be57600080fd5b6124ca89828a01612365565b979a9699509497509295939492505050565b60005b838110156124f75781810151838201526020016124df565b50506000910152565b602081526000825180602084015261251f8160408501602087016124dc565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008060006060848603121561256657600080fd5b8335612571816121cb565b92506020840135612581816121cb565b91506040840135612591816121cb565b809150509250925092565b6000806000606084860312156125b157600080fd5b83356125bc816121cb565b925060208401356125cc816121cb565b929592945050506040919091013590565b600080600080600080608087890312156125f657600080fd5b863567ffffffffffffffff81111561260d57600080fd5b61261989828a01612365565b909750955050602087013561262d816121cb565b935060408701359250606087013567ffffffffffffffff8111156124be57600080fd5b80151581146107f057600080fd5b60006020828403121561267057600080fd5b8135611ffc81612650565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b600081356126d1816121cb565b6001600160a01b0316835260208201356126ea816121cb565b6001600160a01b03166020840152604082810135908401526060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261273857600080fd5b820160208101903567ffffffffffffffff81111561275557600080fd5b80360382131561276457600080fd5b60806060860152611fad60808601828461267b565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006127b160a08301858761267b565b82810360808401526127c381856126c4565b9998505050505050505050565b8481526060602082015260006127ea60608301858761267b565b82810360408401526127fc81856126c4565b979650505050505050565b60008735612814816121cb565b6001600160a01b0381168352506001600160a01b03871660208301526001600160a01b038616604083015284606083015260a0608083015261285a60a08301848661267b565b98975050505050505050565b838152604060208201526000611fad60408301848661267b565b60006020828403121561289257600080fd5b5051919050565b8181038181111561071d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6060815260006128e760608301878961267b565b856020840152828103604084015261285a81858761267b565b60006020828403121561291257600080fd5b8151611ffc81612650565b6000825161292f8184602087016124dc565b919091019291505056fea26469706673582212208abe4f70f408993f64a70015649b265cc33bcd2b707bc7e97b3c922cedec5ae764736f6c634300081a0033"; type ERC20CustodyConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/GatewayEVMUpgradeTest__factory.ts b/v2/types/factories/GatewayEVMUpgradeTest__factory.ts index 2d75df66..4f3c2bc5 100644 --- a/v2/types/factories/GatewayEVMUpgradeTest__factory.ts +++ b/v2/types/factories/GatewayEVMUpgradeTest__factory.ts @@ -46,6 +46,19 @@ const _abi = [ ], stateMutability: "view", }, + { + type: "function", + name: "MAX_PAYLOAD_SIZE", + inputs: [], + outputs: [ + { + name: "", + type: "uint256", + internalType: "uint256", + }, + ], + stateMutability: "view", + }, { type: "function", name: "PAUSER_ROLE", @@ -358,30 +371,6 @@ const _abi = [ outputs: [], stateMutability: "nonpayable", }, - { - type: "function", - name: "execute", - inputs: [ - { - name: "destination", - type: "address", - internalType: "address", - }, - { - name: "data", - type: "bytes", - internalType: "bytes", - }, - ], - outputs: [ - { - name: "", - type: "bytes", - internalType: "bytes", - }, - ], - stateMutability: "payable", - }, { type: "function", name: "execute", @@ -467,6 +456,18 @@ const _abi = [ type: "function", name: "executeWithERC20", inputs: [ + { + name: "messageContext", + type: "tuple", + internalType: "struct MessageContext", + components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, + ], + }, { name: "token", type: "address", @@ -764,6 +765,19 @@ const _abi = [ outputs: [], stateMutability: "nonpayable", }, + { + type: "function", + name: "updateTSSAddress", + inputs: [ + { + name: "newTSSAddress", + type: "address", + internalType: "address", + }, + ], + outputs: [], + stateMutability: "nonpayable", + }, { type: "function", name: "upgradeToAndCall", @@ -1393,6 +1407,11 @@ const _abi = [ }, ], }, + { + type: "error", + name: "ZETANotSupported", + inputs: [], + }, { type: "error", name: "ZeroAddress", @@ -1401,7 +1420,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161386d6100fd600039600081816121ee015281816122170152612685015261386d6000f3fe6080604052600436106101fe5760003560e01c80635c975abb1161011d578063aa0c0fc1116100b0578063cb7ba8e51161007f578063d547741f11610064578063d547741f1461066f578063dda79b751461068f578063e63ab1e9146106af57600080fd5b8063cb7ba8e51461063c578063d09e3b781461064f57600080fd5b8063aa0c0fc114610593578063ad3cb1cc146105b3578063ae7a3a6f146105fc578063c0c53b8b1461061c57600080fd5b80638456cb59116100ec5780638456cb59146104d057806391d14854146104e5578063a217fddf1461054a578063a783c7891461055f57600080fd5b80635c975abb1461043f5780635d62c86014610476578063726ac97c146104aa578063744b9b8b146104bd57600080fd5b806336568abe116101955780635131ab59116101645780635131ab59146103ca57806352d1902d146103ea57806357bec62f146103ff5780635b1125911461041f57600080fd5b806336568abe1461036f57806338e225271461038f5780633f4ba83a146103a25780634f1ef286146103b757600080fd5b80631cff79cd116101d15780631cff79cd1461029a57806321e093b1146102ba578063248a9ca3146102f25780632f2ff15d1461034f57600080fd5b806301ffc9a71461020357806310188aef14610238578063102614b01461025a5780631becceb41461027a575b600080fd5b34801561020f57600080fd5b5061022361021e366004612df1565b6106e3565b60405190151581526020015b60405180910390f35b34801561024457600080fd5b50610258610253366004612e4f565b61077c565b005b34801561026657600080fd5b50610258610275366004612e82565b610857565b34801561028657600080fd5b50610258610295366004612f33565b610951565b6102ad6102a8366004612f9a565b6109cf565b60405161022f919061303d565b3480156102c657600080fd5b506003546102da906001600160a01b031681565b6040516001600160a01b03909116815260200161022f565b3480156102fe57600080fd5b5061034161030d366004613050565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161022f565b34801561035b57600080fd5b5061025861036a366004613069565b610a87565b34801561037b57600080fd5b5061025861038a366004613069565b610acb565b6102ad61039d366004613095565b610b1c565b3480156103ae57600080fd5b50610258610c08565b6102586103c5366004613186565b610c3d565b3480156103d657600080fd5b506102586103e5366004613217565b610c5c565b3480156103f657600080fd5b50610341610f5c565b34801561040b57600080fd5b506002546102da906001600160a01b031681565b34801561042b57600080fd5b506001546102da906001600160a01b031681565b34801561044b57600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610223565b34801561048257600080fd5b506103417f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6102586104b8366004613286565b610f8b565b6102586104cb366004612f33565b611103565b3480156104dc57600080fd5b5061025861127f565b3480156104f157600080fd5b50610223610500366004613069565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561055657600080fd5b50610341600081565b34801561056b57600080fd5b506103417f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561059f57600080fd5b506102586105ae3660046132e6565b6112b1565b3480156105bf57600080fd5b506102ad6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561060857600080fd5b50610258610617366004612e4f565b61145a565b34801561062857600080fd5b5061025861063736600461337e565b611535565b61025861064a3660046133c1565b6117fc565b34801561065b57600080fd5b5061025861066a366004613434565b6119e4565b34801561067b57600080fd5b5061025861068a366004613069565b611adc565b34801561069b57600080fd5b506000546102da906001600160a01b031681565b3480156106bb57600080fd5b506103417f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061077657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600061078781611b20565b6001600160a01b0382166107ae5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b0316156107f1576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61081b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b2a565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61085f611c17565b610867611c75565b826000036108a1576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166108c85760405163d92e233d60e01b815260040160405180910390fd5b6108d3338385611cf6565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c85858560405161091a939291906135d9565b60405180910390a361094b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b610959611c17565b610961611c75565b6001600160a01b0384166109885760405163d92e233d60e01b815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d97485858560405161091a9392919061360f565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109fb81611b20565b610a03611c17565b6001600160a01b038516610a2a5760405163d92e233d60e01b815260040160405180910390fd5b6000610a37868686611f59565b9050856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546348787604051610a7693929190613635565b60405180910390a295945050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610ac181611b20565b61094b8383611b2a565b6001600160a01b0381163314610b0d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b17828261200c565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b4881611b20565b610b50611c17565b610b58611c75565b6001600160a01b038516610b7f5760405163d92e233d60e01b815260040160405180910390fd5b6060610b8d878787876120d0565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610bcc93929190613635565b60405180910390a29150610bff60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50949350505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c3281611b20565b610c3a612153565b50565b610c456121e3565b610c4e826122b3565b610c5882826122be565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610c8681611b20565b610c8e611c17565b610c96611c75565b83600003610cd0576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610cf75760405163d92e233d60e01b815260040160405180910390fd5b610d0186866123c4565b610d37576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc3919061364f565b610df9576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e04858484611f59565b50610e0f86866123c4565b610e45576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610ea5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec9919061366c565b90508015610edb57610edb8782612454565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382878787604051610f2293929190613635565b60405180910390a350610f5460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b6000610f6661267a565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610f93611c17565b610f9b611c75565b34600003610fd5576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610ffc5760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611049576040519150601f19603f3d011682016040523d82523d6000602084013e61104e565b606091505b5050905080611089576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c346000866040516110d1939291906135d9565b60405180910390a350610c5860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61110b611c17565b611113611c75565b3460000361114d576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166111745760405163d92e233d60e01b815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d80600081146111c1576040519150601f19603f3d011682016040523d82523d6000602084013e6111c6565b606091505b5050905080611201576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600088888860405161124d959493929190613685565b60405180910390a35061094b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6112a981611b20565b610c3a6126dc565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b96112db81611b20565b6112e3611c17565b6112eb611c75565b84600003611325576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03861661134c5760405163d92e233d60e01b815260040160405180910390fd5b6113606001600160a01b0388168787612755565b6040517fc9028a360000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063c9028a36906113a5908590600401613728565b600060405180830381600087803b1580156113bf57600080fd5b505af11580156113d3573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e03587878787604051611420949392919061373b565b60405180910390a361145160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b600061146581611b20565b6001600160a01b03821661148c5760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b0316156114cf576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114f97f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611b2a565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115805750825b905060008267ffffffffffffffff16600114801561159d5750303b155b9050811580156115ab575080155b156115e2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116435784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061166057506001600160a01b038716155b1561167e5760405163d92e233d60e01b815260040160405180910390fd5b6116866127c9565b61168e6127d1565b6116966127c9565b61169e6127e1565b6116a9600087611b2a565b506116d47f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611b2a565b506116ff7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a89611b2a565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561175d7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611b2a565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03891617905583156117f25784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb61182681611b20565b61182e611c17565b611836611c75565b6001600160a01b03851661185d5760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d80600081146118aa576040519150601f19603f3d011682016040523d82523d6000602084013e6118af565b606091505b50509050806118ea576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc9028a360000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063c9028a369061192f908690600401613728565b600060405180830381600087803b15801561194957600080fd5b505af115801561195d573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e035348888886040516119ab949392919061373b565b60405180910390a3506119dd60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6119ec611c17565b6119f4611c75565b84600003611a2e576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611a555760405163d92e233d60e01b815260040160405180910390fd5b611a60338587611cf6565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8787878787604051611aab959493929190613685565b60405180910390a3610f5460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611b1681611b20565b61094b838361200c565b610c3a81336127f1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611c0d576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611bc33390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610776565b6000915050610776565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611c73576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611cf0576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611e5a57611d216001600160a01b03831684308461287e565b6002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af1158015611d8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db1919061364f565b611de7576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b158015611e4657600080fd5b505af1158015611451573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015611ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee1919061364f565b611f17576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610b17906001600160a01b03848116918691168461287e565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6060611f6583836128b7565b600080856001600160a01b0316348686604051611f83929190613772565b60006040518083038185875af1925050503d8060008114611fc0576040519150601f19603f3d011682016040523d82523d6000602084013e611fc5565b606091505b509150915081612001576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611c0d576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610776565b6060836001600160a01b031663676cc054348786866040518563ffffffff1660e01b815260040161210393929190613782565b60006040518083038185885af1158015612121573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261214a91908101906137ad565b95945050505050565b61215b61293c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061227c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166122707f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611c73576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c5881611b20565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612318575060408051601f3d908101601f191682019092526123159181019061366c565b60015b61235e576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146123ba576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612355565b610b178383612997565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612430573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612005919061364f565b6003546001600160a01b03908116908316036125a3576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156124d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124fa919061364f565b612530576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561258f57600080fd5b505af1158015610f54573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa158015612606573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262a919061364f565b612660576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610c58906001600160a01b03848116911683612755565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c73576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126e4611c17565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336121c5565b6040516001600160a01b03838116602483015260448201839052610b1791859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506129ed565b611c73612a69565b6127d9612a69565b611c73612ad0565b6127e9612a69565b611c73612ad8565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610c58576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612355565b6040516001600160a01b03848116602483015283811660448301526064820183905261094b9186918216906323b872dd90608401612782565b60048110610c585781357f98933fac000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610b17576040517fed69977500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611c73576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129a082612b29565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156129e557610b178282612bd1565b610c58612c3e565b6000612a026001600160a01b03841683612c76565b90508051600014158015612a27575080806020019051810190612a25919061364f565b155b15610b17576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612355565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611c73576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f33612a69565b612ae0612a69565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612b78576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612355565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612bee919061381b565b600060405180830381855af49150503d8060008114612c29576040519150601f19603f3d011682016040523d82523d6000602084013e612c2e565b606091505b509150915061214a858383612c84565b3415611c73576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061200583836000612cf9565b606082612c9957612c9482612daf565b612005565b8151158015612cb057506001600160a01b0384163b155b15612cf2576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612355565b5080612005565b606081471015612d37576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401612355565b600080856001600160a01b03168486604051612d53919061381b565b60006040518083038185875af1925050503d8060008114612d90576040519150601f19603f3d011682016040523d82523d6000602084013e612d95565b606091505b5091509150612da5868383612c84565b9695505050505050565b805115612dbf5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612e0357600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461200557600080fd5b80356001600160a01b0381168114612e4a57600080fd5b919050565b600060208284031215612e6157600080fd5b61200582612e33565b600060a08284031215612e7c57600080fd5b50919050565b60008060008060808587031215612e9857600080fd5b612ea185612e33565b935060208501359250612eb660408601612e33565b9150606085013567ffffffffffffffff811115612ed257600080fd5b612ede87828801612e6a565b91505092959194509250565b60008083601f840112612efc57600080fd5b50813567ffffffffffffffff811115612f1457600080fd5b602083019150836020828501011115612f2c57600080fd5b9250929050565b60008060008060608587031215612f4957600080fd5b612f5285612e33565b9350602085013567ffffffffffffffff811115612f6e57600080fd5b612f7a87828801612eea565b909450925050604085013567ffffffffffffffff811115612ed257600080fd5b600080600060408486031215612faf57600080fd5b612fb884612e33565b9250602084013567ffffffffffffffff811115612fd457600080fd5b612fe086828701612eea565b9497909650939450505050565b60005b83811015613008578181015183820152602001612ff0565b50506000910152565b60008151808452613029816020860160208601612fed565b601f01601f19169290920160200192915050565b6020815260006120056020830184613011565b60006020828403121561306257600080fd5b5035919050565b6000806040838503121561307c57600080fd5b8235915061308c60208401612e33565b90509250929050565b60008060008084860360608112156130ac57600080fd5b60208112156130ba57600080fd5b508493506130ca60208601612e33565b9250604085013567ffffffffffffffff8111156130e657600080fd5b6130f287828801612eea565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613156576131566130fe565b604052919050565b600067ffffffffffffffff821115613178576131786130fe565b50601f01601f191660200190565b6000806040838503121561319957600080fd5b6131a283612e33565b9150602083013567ffffffffffffffff8111156131be57600080fd5b8301601f810185136131cf57600080fd5b80356131e26131dd8261315e565b61312d565b8181528660208385010111156131f757600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561322f57600080fd5b61323886612e33565b945061324660208701612e33565b935060408601359250606086013567ffffffffffffffff81111561326957600080fd5b61327588828901612eea565b969995985093965092949392505050565b6000806040838503121561329957600080fd5b6132a283612e33565b9150602083013567ffffffffffffffff8111156132be57600080fd5b6132ca85828601612e6a565b9150509250929050565b600060808284031215612e7c57600080fd5b60008060008060008060a087890312156132ff57600080fd5b61330887612e33565b955061331660208801612e33565b945060408701359350606087013567ffffffffffffffff81111561333957600080fd5b61334589828a01612eea565b909450925050608087013567ffffffffffffffff81111561336557600080fd5b61337189828a016132d4565b9150509295509295509295565b60008060006060848603121561339357600080fd5b61339c84612e33565b92506133aa60208501612e33565b91506133b860408501612e33565b90509250925092565b600080600080606085870312156133d757600080fd5b6133e085612e33565b9350602085013567ffffffffffffffff8111156133fc57600080fd5b61340887828801612eea565b909450925050604085013567ffffffffffffffff81111561342857600080fd5b612ede878288016132d4565b60008060008060008060a0878903121561344d57600080fd5b61345687612e33565b95506020870135945061346b60408801612e33565b9350606087013567ffffffffffffffff81111561348757600080fd5b61349389828a01612eea565b909450925050608087013567ffffffffffffffff8111156134b357600080fd5b61337189828a01612e6a565b8015158114610c3a57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261350257600080fd5b830160208101925035905067ffffffffffffffff81111561352257600080fd5b803603821315612f2c57600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b0361356d82612e33565b16825260006020820135613580816134bf565b151560208401526001600160a01b0361359b60408401612e33565b1660408401526135ae60608301836134cd565b60a060608601526135c360a086018284613531565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a06060820152600061214a60a083018461355c565b604081526000613623604083018587613531565b8281036020840152612da5818561355c565b83815260406020820152600061214a604083018486613531565b60006020828403121561366157600080fd5b8151612005816134bf565b60006020828403121561367e57600080fd5b5051919050565b8581526001600160a01b03851660208201526080604082015260006136ae608083018587613531565b82810360608401526136c0818561355c565b98975050505050505050565b6001600160a01b036136dd82612e33565b1682526001600160a01b036136f460208301612e33565b16602083015260408181013590830152600061371360608301836134cd565b6080606086015261214a608086018284613531565b60208152600061200560208301846136cc565b848152606060208201526000613755606083018587613531565b828103604084015261376781856136cc565b979650505050505050565b8183823760009101908152919050565b6001600160a01b0361379385612e33565b16815260406020820152600061214a604083018486613531565b6000602082840312156137bf57600080fd5b815167ffffffffffffffff8111156137d657600080fd5b8201601f810184136137e757600080fd5b80516137f56131dd8261315e565b81815285602083850101111561380a57600080fd5b61214a826020830160208601612fed565b6000825161382d818460208701612fed565b919091019291505056fea26469706673582212208b72f5389b712bdb905de4b6561d7eed975fa0feeef1beea3562eb3d8e499dc564736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613abe6100fd6000396000818161235c01528181612385015261253d0152613abe6000f3fe6080604052600436106102195760003560e01c8063744b9b8b1161011d578063aa0c0fc1116100b0578063cb7ba8e51161007f578063d547741f11610064578063d547741f146106ad578063dda79b75146106cd578063e63ab1e9146106ed57600080fd5b8063cb7ba8e51461067a578063d09e3b781461068d57600080fd5b8063aa0c0fc1146105d1578063ad3cb1cc146105f1578063ae7a3a6f1461063a578063c0c53b8b1461065a57600080fd5b8063950837aa116100ec578063950837aa14610552578063a217fddf14610572578063a2ba193414610587578063a783c7891461059d57600080fd5b8063744b9b8b146104a55780637bbe9afa146104b85780638456cb59146104d857806391d14854146104ed57600080fd5b806338e22527116101b057806357bec62f1161017f5780635c975abb116101645780635c975abb146104275780635d62c8601461045e578063726ac97c1461049257600080fd5b806357bec62f146103e75780635b1125911461040757600080fd5b806338e225271461038a5780633f4ba83a146103aa5780634f1ef286146103bf57806352d1902d146103d257600080fd5b806321e093b1116101ec57806321e093b1146102b5578063248a9ca3146102ed5780632f2ff15d1461034a57806336568abe1461036a57600080fd5b806301ffc9a71461021e57806310188aef14610253578063102614b0146102755780631becceb414610295575b600080fd5b34801561022a57600080fd5b5061023e610239366004612fda565b610721565b60405190151581526020015b60405180910390f35b34801561025f57600080fd5b5061027361026e366004613038565b6107ba565b005b34801561028157600080fd5b5061027361029036600461306b565b610895565b3480156102a157600080fd5b506102736102b036600461311c565b6109d9565b3480156102c157600080fd5b506003546102d5906001600160a01b031681565b6040516001600160a01b03909116815260200161024a565b3480156102f957600080fd5b5061033c610308366004613183565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161024a565b34801561035657600080fd5b5061027361036536600461319c565b610aaa565b34801561037657600080fd5b5061027361038536600461319c565b610aee565b61039d6103983660046131da565b610b3f565b60405161024a919061328c565b3480156103b657600080fd5b50610273610c5b565b6102736103cd366004613327565b610c90565b3480156103de57600080fd5b5061033c610caf565b3480156103f357600080fd5b506002546102d5906001600160a01b031681565b34801561041357600080fd5b506001546102d5906001600160a01b031681565b34801561043357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661023e565b34801561046a57600080fd5b5061033c7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6102736104a03660046133b8565b610cde565b6102736104b336600461311c565b610ea0565b3480156104c457600080fd5b506102736104d3366004613406565b61106f565b3480156104e457600080fd5b506102736113a0565b3480156104f957600080fd5b5061023e61050836600461319c565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561055e57600080fd5b5061027361056d366004613038565b6113d2565b34801561057e57600080fd5b5061033c600081565b34801561059357600080fd5b5061033c61040081565b3480156105a957600080fd5b5061033c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156105dd57600080fd5b506102736105ec366004613498565b6114e9565b3480156105fd57600080fd5b5061039d6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561064657600080fd5b50610273610655366004613038565b611689565b34801561066657600080fd5b50610273610675366004613530565b611764565b610273610688366004613573565b611a2b565b34801561069957600080fd5b506102736106a83660046135e6565b611c13565b3480156106b957600080fd5b506102736106c836600461319c565b611d66565b3480156106d957600080fd5b506000546102d5906001600160a01b031681565b3480156106f957600080fd5b5061033c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107b457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60006107c581611daa565b6001600160a01b0382166107ec5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b03161561082f576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108597f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611db4565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61089d611ea1565b6108a5611eff565b826000036108df576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166109065760405163d92e233d60e01b815260040160405180910390fd5b6104006109166060830183613671565b90501115610950576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61095b338385611f80565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8585856040516109a2939291906137f0565b60405180910390a36109d360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b6109e1611ea1565b6109e9611eff565b6001600160a01b038416610a105760405163d92e233d60e01b815260040160405180910390fd5b610400610a206060830183613671565b610a2b915084613826565b1115610a63576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d9748585856040516109a293929190613860565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610ae481611daa565b6109d38383611db4565b6001600160a01b0381163314610b30576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b3a82826120c7565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b6b81611daa565b610b73611ea1565b610b7b611eff565b6001600160a01b038516610ba25760405163d92e233d60e01b815260040160405180910390fd5b60606000610bb36020890189613038565b6001600160a01b031603610bd357610bcc86868661218b565b9050610be2565b610bdf8787878761223e565b90505b856001600160a01b03167f373df382b9c587826f3de13f16d67f8d99f28ee947fc0924c6ef2d6d2c7e8546348787604051610c1f93929190613886565b60405180910390a29150610c5260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50949350505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c8581611daa565b610c8d6122c1565b50565b610c98612351565b610ca182612421565b610cab828261242c565b5050565b6000610cb9612532565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610ce6611ea1565b610cee611eff565b34600003610d28576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610d4f5760405163d92e233d60e01b815260040160405180910390fd5b610400610d5f6060830183613671565b90501115610d99576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610de6576040519150601f19603f3d011682016040523d82523d6000602084013e610deb565b606091505b5050905080610e26576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600086604051610e6e939291906137f0565b60405180910390a350610cab60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b610ea8611ea1565b610eb0611eff565b34600003610eea576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416610f115760405163d92e233d60e01b815260040160405180910390fd5b610400610f216060830183613671565b610f2c915084613826565b1115610f64576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610fb1576040519150601f19603f3d011682016040523d82523d6000602084013e610fb6565b606091505b5050905080610ff1576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600088888860405161103d9594939291906138a0565b60405180910390a3506109d360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961109981611daa565b6110a1611ea1565b6110a9611eff565b836000036110e3576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851661110a5760405163d92e233d60e01b815260040160405180910390fd5b6111148686612594565b61114a576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af11580156111b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d691906138e7565b61120c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121b6020890189613038565b6001600160a01b03160361123a5761123485848461218b565b50611248565b6112468786858561223e565b505b6112528686612594565b611288576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa1580156112e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130c9190613904565b9050801561131e5761131e8782612624565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161136593929190613886565b60405180910390a35061139760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6113ca81611daa565b610c8d61284a565b60006113dd81611daa565b6001600160a01b0382166114045760405163d92e233d60e01b815260040160405180910390fd5b60015461143b907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166120c7565b506114667f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83611db4565b50600154604080516001600160a01b03928316815291841660208301527f3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579910160405180910390a150600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961151381611daa565b61151b611ea1565b611523611eff565b8460000361155d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166115845760405163d92e233d60e01b815260040160405180910390fd5b6115986001600160a01b03881687876128c3565b6040517fc9028a360000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063c9028a36906115dd908590600401613979565b600060405180830381600087803b1580156115f757600080fd5b505af115801561160b573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e03587878787604051611658949392919061398c565b60405180910390a361139760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b600061169481611daa565b6001600160a01b0382166116bb5760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b0316156116fe576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117287f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611db4565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117af5750825b905060008267ffffffffffffffff1660011480156117cc5750303b155b9050811580156117da575080155b15611811576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118725784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061188f57506001600160a01b038716155b156118ad5760405163d92e233d60e01b815260040160405180910390fd5b6118b5612937565b6118bd61293f565b6118c5612937565b6118cd61294f565b6118d8600087611db4565b506119037f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611db4565b5061192e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a89611db4565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561198c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611db4565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611a215784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb611a5581611daa565b611a5d611ea1565b611a65611eff565b6001600160a01b038516611a8c5760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d8060008114611ad9576040519150601f19603f3d011682016040523d82523d6000602084013e611ade565b606091505b5050905080611b19576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc9028a360000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063c9028a3690611b5e908690600401613979565b600060405180830381600087803b158015611b7857600080fd5b505af1158015611b8c573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e03534888888604051611bda949392919061398c565b60405180910390a350611c0c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b611c1b611ea1565b611c23611eff565b84600003611c5d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611c845760405163d92e233d60e01b815260040160405180910390fd5b610400611c946060830183613671565b611c9f915084613826565b1115611cd7576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ce2338587611f80565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8787878787604051611d2d9594939291906138a0565b60405180910390a3611d5e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611da081611daa565b6109d383836120c7565b610c8d813361295f565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611e97576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611e4d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107b4565b60009150506107b4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611efd576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611f7a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611fc8576040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561202b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204f91906138e7565b612085576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610b3a906001600160a01b0384811691869116846129ec565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611e97576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107b4565b60606121978383612a25565b600080856001600160a01b03163486866040516121b59291906139c3565b60006040518083038185875af1925050503d80600081146121f2576040519150601f19603f3d011682016040523d82523d6000602084013e6121f7565b606091505b509150915081612233576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b6060836001600160a01b031663676cc054348786866040518563ffffffff1660e01b8152600401612271939291906139d3565b60006040518083038185885af115801561228f573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526122b891908101906139fe565b95945050505050565b6122c9612b25565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123ea57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123de7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611efd576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab81611daa565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612486575060408051601f3d908101601f1916820190925261248391810190613904565b60015b6124cc576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612528576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016124c3565b610b3a8383612b80565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611efd576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612600573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223791906138e7565b6003546001600160a01b0390811690831603612773576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156126a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ca91906138e7565b612700576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561275f57600080fd5b505af1158015611d5e573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156127d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fa91906138e7565b612830576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610cab906001600160a01b038481169116836128c3565b612852611ea1565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612333565b6040516001600160a01b03838116602483015260448201839052610b3a91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612bd6565b611efd612c52565b612947612c52565b611efd612cb9565b612957612c52565b611efd612cc1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610cab576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016124c3565b6040516001600160a01b0384811660248301528381166044830152606482018390526109d39186918216906323b872dd906084016128f0565b60048110610cab5781357f98933fac000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601612aaa576040517fed69977500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f36fd75ca000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610b3a576040517ff3459a9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611efd576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b8982612d12565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612bce57610b3a8282612dba565b610cab612e27565b6000612beb6001600160a01b03841683612e5f565b90508051600014158015612c10575080806020019051810190612c0e91906138e7565b155b15610b3a576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016124c3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611efd576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120a1612c52565b612cc9612c52565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612d61576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016124c3565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612dd79190613a6c565b600060405180830381855af49150503d8060008114612e12576040519150601f19603f3d011682016040523d82523d6000602084013e612e17565b606091505b50915091506122b8858383612e6d565b3415611efd576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061223783836000612ee2565b606082612e8257612e7d82612f98565b612237565b8151158015612e9957506001600160a01b0384163b155b15612edb576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016124c3565b5080612237565b606081471015612f20576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016124c3565b600080856001600160a01b03168486604051612f3c9190613a6c565b60006040518083038185875af1925050503d8060008114612f79576040519150601f19603f3d011682016040523d82523d6000602084013e612f7e565b606091505b5091509150612f8e868383612e6d565b9695505050505050565b805115612fa85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612fec57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461223757600080fd5b80356001600160a01b038116811461303357600080fd5b919050565b60006020828403121561304a57600080fd5b6122378261301c565b600060a0828403121561306557600080fd5b50919050565b6000806000806080858703121561308157600080fd5b61308a8561301c565b93506020850135925061309f6040860161301c565b9150606085013567ffffffffffffffff8111156130bb57600080fd5b6130c787828801613053565b91505092959194509250565b60008083601f8401126130e557600080fd5b50813567ffffffffffffffff8111156130fd57600080fd5b60208301915083602082850101111561311557600080fd5b9250929050565b6000806000806060858703121561313257600080fd5b61313b8561301c565b9350602085013567ffffffffffffffff81111561315757600080fd5b613163878288016130d3565b909450925050604085013567ffffffffffffffff8111156130bb57600080fd5b60006020828403121561319557600080fd5b5035919050565b600080604083850312156131af57600080fd5b823591506131bf6020840161301c565b90509250929050565b60006020828403121561306557600080fd5b600080600080606085870312156131f057600080fd5b6131fa86866131c8565b93506132086020860161301c565b9250604085013567ffffffffffffffff81111561322457600080fd5b613230878288016130d3565b95989497509550505050565b60005b8381101561325757818101518382015260200161323f565b50506000910152565b6000815180845261327881602086016020860161323c565b601f01601f19169290920160200192915050565b6020815260006122376020830184613260565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156132f7576132f761329f565b604052919050565b600067ffffffffffffffff8211156133195761331961329f565b50601f01601f191660200190565b6000806040838503121561333a57600080fd5b6133438361301c565b9150602083013567ffffffffffffffff81111561335f57600080fd5b8301601f8101851361337057600080fd5b803561338361337e826132ff565b6132ce565b81815286602083850101111561339857600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080604083850312156133cb57600080fd5b6133d48361301c565b9150602083013567ffffffffffffffff8111156133f057600080fd5b6133fc85828601613053565b9150509250929050565b60008060008060008060a0878903121561341f57600080fd5b61342988886131c8565b95506134376020880161301c565b94506134456040880161301c565b935060608701359250608087013567ffffffffffffffff81111561346857600080fd5b61347489828a016130d3565b979a9699509497509295939492505050565b60006080828403121561306557600080fd5b60008060008060008060a087890312156134b157600080fd5b6134ba8761301c565b95506134c86020880161301c565b945060408701359350606087013567ffffffffffffffff8111156134eb57600080fd5b6134f789828a016130d3565b909450925050608087013567ffffffffffffffff81111561351757600080fd5b61352389828a01613486565b9150509295509295509295565b60008060006060848603121561354557600080fd5b61354e8461301c565b925061355c6020850161301c565b915061356a6040850161301c565b90509250925092565b6000806000806060858703121561358957600080fd5b6135928561301c565b9350602085013567ffffffffffffffff8111156135ae57600080fd5b6135ba878288016130d3565b909450925050604085013567ffffffffffffffff8111156135da57600080fd5b6130c787828801613486565b60008060008060008060a087890312156135ff57600080fd5b6136088761301c565b95506020870135945061361d6040880161301c565b9350606087013567ffffffffffffffff81111561363957600080fd5b61364589828a016130d3565b909450925050608087013567ffffffffffffffff81111561366557600080fd5b61352389828a01613053565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136a657600080fd5b83018035915067ffffffffffffffff8211156136c157600080fd5b60200191503681900382131561311557600080fd5b8015158114610c8d57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261371957600080fd5b830160208101925035905067ffffffffffffffff81111561373957600080fd5b80360382131561311557600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b036137848261301c565b16825260006020820135613797816136d6565b151560208401526001600160a01b036137b26040840161301c565b1660408401526137c560608301836136e4565b60a060608601526137da60a086018284613748565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a0606082015260006122b860a0830184613773565b808201808211156107b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b604081526000613874604083018587613748565b8281036020840152612f8e8185613773565b8381526040602082015260006122b8604083018486613748565b8581526001600160a01b03851660208201526080604082015260006138c9608083018587613748565b82810360608401526138db8185613773565b98975050505050505050565b6000602082840312156138f957600080fd5b8151612237816136d6565b60006020828403121561391657600080fd5b5051919050565b6001600160a01b0361392e8261301c565b1682526001600160a01b036139456020830161301c565b16602083015260408181013590830152600061396460608301836136e4565b608060608601526122b8608086018284613748565b602081526000612237602083018461391d565b8481526060602082015260006139a6606083018587613748565b82810360408401526139b8818561391d565b979650505050505050565b8183823760009101908152919050565b6001600160a01b036139e48561301c565b1681526040602082015260006122b8604083018486613748565b600060208284031215613a1057600080fd5b815167ffffffffffffffff811115613a2757600080fd5b8201601f81018413613a3857600080fd5b8051613a4661337e826132ff565b818152856020838501011115613a5b57600080fd5b6122b882602083016020860161323c565b60008251613a7e81846020870161323c565b919091019291505056fea26469706673582212206b5ea992fec97333d1ee4708664e5b63fd6fbfbbc65762aac1b37caeb1d3880464736f6c634300081a0033"; type GatewayEVMUpgradeTestConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/GatewayEVM__factory.ts b/v2/types/factories/GatewayEVM__factory.ts index 92e2b57e..0d4558b6 100644 --- a/v2/types/factories/GatewayEVM__factory.ts +++ b/v2/types/factories/GatewayEVM__factory.ts @@ -368,30 +368,6 @@ const _abi = [ outputs: [], stateMutability: "nonpayable", }, - { - type: "function", - name: "execute", - inputs: [ - { - name: "destination", - type: "address", - internalType: "address", - }, - { - name: "data", - type: "bytes", - internalType: "bytes", - }, - ], - outputs: [ - { - name: "", - type: "bytes", - internalType: "bytes", - }, - ], - stateMutability: "payable", - }, { type: "function", name: "execute", @@ -477,6 +453,18 @@ const _abi = [ type: "function", name: "executeWithERC20", inputs: [ + { + name: "messageContext", + type: "tuple", + internalType: "struct MessageContext", + components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, + ], + }, { name: "token", type: "address", @@ -1404,7 +1392,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613b7b6100fd600039600081816123e20152818161240b01526128790152613b7b6000f3fe6080604052600436106102345760003560e01c80635d62c86011610138578063aa0c0fc1116100b0578063cb7ba8e51161007f578063d547741f11610064578063d547741f146106db578063dda79b75146106fb578063e63ab1e91461071b57600080fd5b8063cb7ba8e5146106a8578063d09e3b78146106bb57600080fd5b8063aa0c0fc1146105ff578063ad3cb1cc1461061f578063ae7a3a6f14610668578063c0c53b8b1461068857600080fd5b806391d1485411610107578063a217fddf116100ec578063a217fddf146105a0578063a2ba1934146105b5578063a783c789146105cb57600080fd5b806391d148541461051b578063950837aa1461058057600080fd5b80635d62c860146104ac578063726ac97c146104e0578063744b9b8b146104f35780638456cb591461050657600080fd5b806336568abe116101cb5780635131ab591161019a57806357bec62f1161017f57806357bec62f146104355780635b112591146104555780635c975abb1461047557600080fd5b80635131ab591461040057806352d1902d1461042057600080fd5b806336568abe146103a557806338e22527146103c55780633f4ba83a146103d85780634f1ef286146103ed57600080fd5b80631cff79cd116102075780631cff79cd146102d057806321e093b1146102f0578063248a9ca3146103285780632f2ff15d1461038557600080fd5b806301ffc9a71461023957806310188aef1461026e578063102614b0146102905780631becceb4146102b0575b600080fd5b34801561024557600080fd5b50610259610254366004613060565b61074f565b60405190151581526020015b60405180910390f35b34801561027a57600080fd5b5061028e6102893660046130be565b6107e8565b005b34801561029c57600080fd5b5061028e6102ab3660046130f1565b6108c3565b3480156102bc57600080fd5b5061028e6102cb3660046131a2565b610a07565b6102e36102de366004613209565b610ad8565b60405161026591906132ac565b3480156102fc57600080fd5b50600354610310906001600160a01b031681565b6040516001600160a01b039091168152602001610265565b34801561033457600080fd5b506103776103433660046132bf565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b604051908152602001610265565b34801561039157600080fd5b5061028e6103a03660046132d8565b610b90565b3480156103b157600080fd5b5061028e6103c03660046132d8565b610bd4565b6102e36103d3366004613304565b610c25565b3480156103e457600080fd5b5061028e610d11565b61028e6103fb3660046133f5565b610d46565b34801561040c57600080fd5b5061028e61041b366004613486565b610d65565b34801561042c57600080fd5b50610377611065565b34801561044157600080fd5b50600254610310906001600160a01b031681565b34801561046157600080fd5b50600154610310906001600160a01b031681565b34801561048157600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610259565b3480156104b857600080fd5b506103777f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b61028e6104ee3660046134f5565b611094565b61028e6105013660046131a2565b611256565b34801561051257600080fd5b5061028e611425565b34801561052757600080fd5b506102596105363660046132d8565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561058c57600080fd5b5061028e61059b3660046130be565b611457565b3480156105ac57600080fd5b50610377600081565b3480156105c157600080fd5b5061037761040081565b3480156105d757600080fd5b506103777f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561060b57600080fd5b5061028e61061a366004613555565b61156e565b34801561062b57600080fd5b506102e36040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561067457600080fd5b5061028e6106833660046130be565b611717565b34801561069457600080fd5b5061028e6106a33660046135ed565b6117f2565b61028e6106b6366004613630565b611ab9565b3480156106c757600080fd5b5061028e6106d63660046136a3565b611ca1565b3480156106e757600080fd5b5061028e6106f63660046132d8565b611dec565b34801561070757600080fd5b50600054610310906001600160a01b031681565b34801561072757600080fd5b506103777f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107e257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60006107f381611e30565b6001600160a01b03821661081a5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b03161561085d576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108877f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611e3a565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6108cb611f27565b6108d3611f85565b8260000361090d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166109345760405163d92e233d60e01b815260040160405180910390fd5b610400610944606083018361372e565b9050111561097e576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610989338385612006565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8585856040516109d0939291906138ad565b60405180910390a3610a0160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b610a0f611f27565b610a17611f85565b6001600160a01b038416610a3e5760405163d92e233d60e01b815260040160405180910390fd5b610400610a4e606083018361372e565b610a599150846138e3565b1115610a91576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d9748585856040516109d09392919061391d565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b0481611e30565b610b0c611f27565b6001600160a01b038516610b335760405163d92e233d60e01b815260040160405180910390fd5b6000610b4086868661214d565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610b7f93929190613943565b60405180910390a295945050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610bca81611e30565b610a018383611e3a565b6001600160a01b0381163314610c16576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c208282612200565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610c5181611e30565b610c59611f27565b610c61611f85565b6001600160a01b038516610c885760405163d92e233d60e01b815260040160405180910390fd5b6060610c96878787876122c4565b9050856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610cd593929190613943565b60405180910390a29150610d0860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50949350505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610d3b81611e30565b610d43612347565b50565b610d4e6123d7565b610d57826124a7565b610d6182826124b2565b5050565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b9610d8f81611e30565b610d97611f27565b610d9f611f85565b83600003610dd9576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516610e005760405163d92e233d60e01b815260040160405180910390fd5b610e0a86866125b8565b610e40576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af1158015610ea8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecc919061395d565b610f02576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f0d85848461214d565b50610f1886866125b8565b610f4e576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015610fae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd2919061397a565b90508015610fe457610fe48782612648565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161102b93929190613943565b60405180910390a35061105d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b600061106f61286e565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b61109c611f27565b6110a4611f85565b346000036110de576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382166111055760405163d92e233d60e01b815260040160405180910390fd5b610400611115606083018361372e565b9050111561114f576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d806000811461119c576040519150601f19603f3d011682016040523d82523d6000602084013e6111a1565b606091505b50509050806111dc576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600086604051611224939291906138ad565b60405180910390a350610d6160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b61125e611f27565b611266611f85565b346000036112a0576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166112c75760405163d92e233d60e01b815260040160405180910390fd5b6104006112d7606083018361372e565b6112e29150846138e3565b111561131a576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114611367576040519150601f19603f3d011682016040523d82523d6000602084013e61136c565b606091505b50509050806113a7576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c3460008888886040516113f3959493929190613993565b60405180910390a350610a0160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61144f81611e30565b610d436128d0565b600061146281611e30565b6001600160a01b0382166114895760405163d92e233d60e01b815260040160405180910390fd5b6001546114c0907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b0316612200565b506114eb7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83611e3a565b50600154604080516001600160a01b03928316815291841660208301527f3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579910160405180910390a150600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961159881611e30565b6115a0611f27565b6115a8611f85565b846000036115e2576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166116095760405163d92e233d60e01b815260040160405180910390fd5b61161d6001600160a01b0388168787612949565b6040517fc9028a360000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063c9028a3690611662908590600401613a36565b600060405180830381600087803b15801561167c57600080fd5b505af1158015611690573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e035878787876040516116dd9493929190613a49565b60405180910390a361170e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b600061172281611e30565b6001600160a01b0382166117495760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b03161561178c576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117b67f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611e3a565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561183d5750825b905060008267ffffffffffffffff16600114801561185a5750303b155b905081158015611868575080155b1561189f576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156119005784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061191d57506001600160a01b038716155b1561193b5760405163d92e233d60e01b815260040160405180910390fd5b6119436129bd565b61194b6129c5565b6119536129bd565b61195b6129d5565b611966600087611e3a565b506119917f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611e3a565b506119bc7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a89611e3a565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a16179055611a1a7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611e3a565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611aaf5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb611ae381611e30565b611aeb611f27565b611af3611f85565b6001600160a01b038516611b1a5760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d8060008114611b67576040519150601f19603f3d011682016040523d82523d6000602084013e611b6c565b606091505b5050905080611ba7576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc9028a360000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063c9028a3690611bec908690600401613a36565b600060405180830381600087803b158015611c0657600080fd5b505af1158015611c1a573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e03534888888604051611c689493929190613a49565b60405180910390a350611c9a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b611ca9611f27565b611cb1611f85565b84600003611ceb576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611d125760405163d92e233d60e01b815260040160405180910390fd5b610400611d22606083018361372e565b611d2d9150846138e3565b1115611d65576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d70338587612006565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8787878787604051611dbb959493929190613993565b60405180910390a361105d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611e2681611e30565b610a018383612200565b610d4381336129e5565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611f1d576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611ed33390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107e2565b60009150506107e2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611f83576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01612000576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b039081169083160361204e576040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156120b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d5919061395d565b61210b576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610c20906001600160a01b038481169186911684612a72565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60606121598383612aab565b600080856001600160a01b0316348686604051612177929190613a80565b60006040518083038185875af1925050503d80600081146121b4576040519150601f19603f3d011682016040523d82523d6000602084013e6121b9565b606091505b5091509150816121f5576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611f1d576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107e2565b6060836001600160a01b031663676cc054348786866040518563ffffffff1660e01b81526004016122f793929190613a90565b60006040518083038185885af1158015612315573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261233e9190810190613abb565b95945050505050565b61234f612bab565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061247057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166124647f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611f83576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d6181611e30565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561250c575060408051601f3d908101601f191682019092526125099181019061397a565b60015b612552576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146125ae576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401612549565b610c208383612c06565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612624573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f9919061395d565b6003546001600160a01b0390811690831603612797576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156126ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ee919061395d565b612724576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561278357600080fd5b505af115801561105d573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156127fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281e919061395d565b612854576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610d61906001600160a01b03848116911683612949565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611f83576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128d8611f27565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336123b9565b6040516001600160a01b03838116602483015260448201839052610c2091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612c5c565b611f83612cd8565b6129cd612cd8565b611f83612d3f565b6129dd612cd8565b611f83612d47565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610d61576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401612549565b6040516001600160a01b038481166024830152838116604483015260648201839052610a019186918216906323b872dd90608401612976565b60048110610d615781357f98933fac000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601612b30576040517fed69977500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f36fd75ca000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610c20576040517ff3459a9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611f83576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c0f82612d98565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612c5457610c208282612e40565b610d61612ead565b6000612c716001600160a01b03841683612ee5565b90508051600014158015612c96575080806020019051810190612c94919061395d565b155b15610c20576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612549565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611f83576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612127612cd8565b612d4f612cd8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612de7576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401612549565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612e5d9190613b29565b600060405180830381855af49150503d8060008114612e98576040519150601f19603f3d011682016040523d82523d6000602084013e612e9d565b606091505b509150915061233e858383612ef3565b3415611f83576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60606121f983836000612f68565b606082612f0857612f038261301e565b6121f9565b8151158015612f1f57506001600160a01b0384163b155b15612f61576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612549565b50806121f9565b606081471015612fa6576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401612549565b600080856001600160a01b03168486604051612fc29190613b29565b60006040518083038185875af1925050503d8060008114612fff576040519150601f19603f3d011682016040523d82523d6000602084013e613004565b606091505b5091509150613014868383612ef3565b9695505050505050565b80511561302e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561307257600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146121f957600080fd5b80356001600160a01b03811681146130b957600080fd5b919050565b6000602082840312156130d057600080fd5b6121f9826130a2565b600060a082840312156130eb57600080fd5b50919050565b6000806000806080858703121561310757600080fd5b613110856130a2565b935060208501359250613125604086016130a2565b9150606085013567ffffffffffffffff81111561314157600080fd5b61314d878288016130d9565b91505092959194509250565b60008083601f84011261316b57600080fd5b50813567ffffffffffffffff81111561318357600080fd5b60208301915083602082850101111561319b57600080fd5b9250929050565b600080600080606085870312156131b857600080fd5b6131c1856130a2565b9350602085013567ffffffffffffffff8111156131dd57600080fd5b6131e987828801613159565b909450925050604085013567ffffffffffffffff81111561314157600080fd5b60008060006040848603121561321e57600080fd5b613227846130a2565b9250602084013567ffffffffffffffff81111561324357600080fd5b61324f86828701613159565b9497909650939450505050565b60005b8381101561327757818101518382015260200161325f565b50506000910152565b6000815180845261329881602086016020860161325c565b601f01601f19169290920160200192915050565b6020815260006121f96020830184613280565b6000602082840312156132d157600080fd5b5035919050565b600080604083850312156132eb57600080fd5b823591506132fb602084016130a2565b90509250929050565b600080600080848603606081121561331b57600080fd5b602081121561332957600080fd5b50849350613339602086016130a2565b9250604085013567ffffffffffffffff81111561335557600080fd5b61336187828801613159565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156133c5576133c561336d565b604052919050565b600067ffffffffffffffff8211156133e7576133e761336d565b50601f01601f191660200190565b6000806040838503121561340857600080fd5b613411836130a2565b9150602083013567ffffffffffffffff81111561342d57600080fd5b8301601f8101851361343e57600080fd5b803561345161344c826133cd565b61339c565b81815286602083850101111561346657600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008060008060006080868803121561349e57600080fd5b6134a7866130a2565b94506134b5602087016130a2565b935060408601359250606086013567ffffffffffffffff8111156134d857600080fd5b6134e488828901613159565b969995985093965092949392505050565b6000806040838503121561350857600080fd5b613511836130a2565b9150602083013567ffffffffffffffff81111561352d57600080fd5b613539858286016130d9565b9150509250929050565b6000608082840312156130eb57600080fd5b60008060008060008060a0878903121561356e57600080fd5b613577876130a2565b9550613585602088016130a2565b945060408701359350606087013567ffffffffffffffff8111156135a857600080fd5b6135b489828a01613159565b909450925050608087013567ffffffffffffffff8111156135d457600080fd5b6135e089828a01613543565b9150509295509295509295565b60008060006060848603121561360257600080fd5b61360b846130a2565b9250613619602085016130a2565b9150613627604085016130a2565b90509250925092565b6000806000806060858703121561364657600080fd5b61364f856130a2565b9350602085013567ffffffffffffffff81111561366b57600080fd5b61367787828801613159565b909450925050604085013567ffffffffffffffff81111561369757600080fd5b61314d87828801613543565b60008060008060008060a087890312156136bc57600080fd5b6136c5876130a2565b9550602087013594506136da604088016130a2565b9350606087013567ffffffffffffffff8111156136f657600080fd5b61370289828a01613159565b909450925050608087013567ffffffffffffffff81111561372257600080fd5b6135e089828a016130d9565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261376357600080fd5b83018035915067ffffffffffffffff82111561377e57600080fd5b60200191503681900382131561319b57600080fd5b8015158114610d4357600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126137d657600080fd5b830160208101925035905067ffffffffffffffff8111156137f657600080fd5b80360382131561319b57600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b03613841826130a2565b1682526000602082013561385481613793565b151560208401526001600160a01b0361386f604084016130a2565b16604084015261388260608301836137a1565b60a0606086015261389760a086018284613805565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a06060820152600061233e60a0830184613830565b808201808211156107e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b604081526000613931604083018587613805565b82810360208401526130148185613830565b83815260406020820152600061233e604083018486613805565b60006020828403121561396f57600080fd5b81516121f981613793565b60006020828403121561398c57600080fd5b5051919050565b8581526001600160a01b03851660208201526080604082015260006139bc608083018587613805565b82810360608401526139ce8185613830565b98975050505050505050565b6001600160a01b036139eb826130a2565b1682526001600160a01b03613a02602083016130a2565b166020830152604081810135908301526000613a2160608301836137a1565b6080606086015261233e608086018284613805565b6020815260006121f960208301846139da565b848152606060208201526000613a63606083018587613805565b8281036040840152613a7581856139da565b979650505050505050565b8183823760009101908152919050565b6001600160a01b03613aa1856130a2565b16815260406020820152600061233e604083018486613805565b600060208284031215613acd57600080fd5b815167ffffffffffffffff811115613ae457600080fd5b8201601f81018413613af557600080fd5b8051613b0361344c826133cd565b818152856020838501011115613b1857600080fd5b61233e82602083016020860161325c565b60008251613b3b81846020870161325c565b919091019291505056fea26469706673582212201229b7b25024e7ca203b587177014870919846d3750c5162ab31d92af37e129664736f6c634300081a0033"; + "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051613abe6100fd6000396000818161235c01528181612385015261253d0152613abe6000f3fe6080604052600436106102195760003560e01c8063744b9b8b1161011d578063aa0c0fc1116100b0578063cb7ba8e51161007f578063d547741f11610064578063d547741f146106ad578063dda79b75146106cd578063e63ab1e9146106ed57600080fd5b8063cb7ba8e51461067a578063d09e3b781461068d57600080fd5b8063aa0c0fc1146105d1578063ad3cb1cc146105f1578063ae7a3a6f1461063a578063c0c53b8b1461065a57600080fd5b8063950837aa116100ec578063950837aa14610552578063a217fddf14610572578063a2ba193414610587578063a783c7891461059d57600080fd5b8063744b9b8b146104a55780637bbe9afa146104b85780638456cb59146104d857806391d14854146104ed57600080fd5b806338e22527116101b057806357bec62f1161017f5780635c975abb116101645780635c975abb146104275780635d62c8601461045e578063726ac97c1461049257600080fd5b806357bec62f146103e75780635b1125911461040757600080fd5b806338e225271461038a5780633f4ba83a146103aa5780634f1ef286146103bf57806352d1902d146103d257600080fd5b806321e093b1116101ec57806321e093b1146102b5578063248a9ca3146102ed5780632f2ff15d1461034a57806336568abe1461036a57600080fd5b806301ffc9a71461021e57806310188aef14610253578063102614b0146102755780631becceb414610295575b600080fd5b34801561022a57600080fd5b5061023e610239366004612fda565b610721565b60405190151581526020015b60405180910390f35b34801561025f57600080fd5b5061027361026e366004613038565b6107ba565b005b34801561028157600080fd5b5061027361029036600461306b565b610895565b3480156102a157600080fd5b506102736102b036600461311c565b6109d9565b3480156102c157600080fd5b506003546102d5906001600160a01b031681565b6040516001600160a01b03909116815260200161024a565b3480156102f957600080fd5b5061033c610308366004613183565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b60405190815260200161024a565b34801561035657600080fd5b5061027361036536600461319c565b610aaa565b34801561037657600080fd5b5061027361038536600461319c565b610aee565b61039d6103983660046131da565b610b3f565b60405161024a919061328c565b3480156103b657600080fd5b50610273610c5b565b6102736103cd366004613327565b610c90565b3480156103de57600080fd5b5061033c610caf565b3480156103f357600080fd5b506002546102d5906001600160a01b031681565b34801561041357600080fd5b506001546102d5906001600160a01b031681565b34801561043357600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661023e565b34801561046a57600080fd5b5061033c7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b981565b6102736104a03660046133b8565b610cde565b6102736104b336600461311c565b610ea0565b3480156104c457600080fd5b506102736104d3366004613406565b61106f565b3480156104e457600080fd5b506102736113a0565b3480156104f957600080fd5b5061023e61050836600461319c565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561055e57600080fd5b5061027361056d366004613038565b6113d2565b34801561057e57600080fd5b5061033c600081565b34801561059357600080fd5b5061033c61040081565b3480156105a957600080fd5b5061033c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156105dd57600080fd5b506102736105ec366004613498565b6114e9565b3480156105fd57600080fd5b5061039d6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b34801561064657600080fd5b50610273610655366004613038565b611689565b34801561066657600080fd5b50610273610675366004613530565b611764565b610273610688366004613573565b611a2b565b34801561069957600080fd5b506102736106a83660046135e6565b611c13565b3480156106b957600080fd5b506102736106c836600461319c565b611d66565b3480156106d957600080fd5b506000546102d5906001600160a01b031681565b3480156106f957600080fd5b5061033c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806107b457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60006107c581611daa565b6001600160a01b0382166107ec5760405163d92e233d60e01b815260040160405180910390fd5b6002546001600160a01b03161561082f576040517f0c8dc01600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108597f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611db4565b5050600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61089d611ea1565b6108a5611eff565b826000036108df576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166109065760405163d92e233d60e01b815260040160405180910390fd5b6104006109166060830183613671565b90501115610950576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61095b338385611f80565b836001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8585856040516109a2939291906137f0565b60405180910390a36109d360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050565b6109e1611ea1565b6109e9611eff565b6001600160a01b038416610a105760405163d92e233d60e01b815260040160405180910390fd5b610400610a206060830183613671565b610a2b915084613826565b1115610a63576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836001600160a01b0316336001600160a01b03167fd34634f30f94a646fdf4ce7078f38fc5fa0d3f0b193658facea4e3e43330d9748585856040516109a293929190613860565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610ae481611daa565b6109d38383611db4565b6001600160a01b0381163314610b30576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b3a82826120c7565b505050565b60607f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b6b81611daa565b610b73611ea1565b610b7b611eff565b6001600160a01b038516610ba25760405163d92e233d60e01b815260040160405180910390fd5b60606000610bb36020890189613038565b6001600160a01b031603610bd357610bcc86868661218b565b9050610be2565b610bdf8787878761223e565b90505b856001600160a01b03167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f348787604051610c1f93929190613886565b60405180910390a29150610c5260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50949350505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c8581611daa565b610c8d6122c1565b50565b610c98612351565b610ca182612421565b610cab828261242c565b5050565b6000610cb9612532565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610ce6611ea1565b610cee611eff565b34600003610d28576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216610d4f5760405163d92e233d60e01b815260040160405180910390fd5b610400610d5f6060830183613671565b90501115610d99576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610de6576040519150601f19603f3d011682016040523d82523d6000602084013e610deb565b606091505b5050905080610e26576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600086604051610e6e939291906137f0565b60405180910390a350610cab60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b610ea8611ea1565b610eb0611eff565b34600003610eea576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416610f115760405163d92e233d60e01b815260040160405180910390fd5b610400610f216060830183613671565b610f2c915084613826565b1115610f64576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610fb1576040519150601f19603f3d011682016040523d82523d6000602084013e610fb6565b606091505b5050905080610ff1576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b846001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c34600088888860405161103d9594939291906138a0565b60405180910390a3506109d360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961109981611daa565b6110a1611ea1565b6110a9611eff565b836000036110e3576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03851661110a5760405163d92e233d60e01b815260040160405180910390fd5b6111148686612594565b61114a576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905287169063095ea7b3906044016020604051808303816000875af11580156111b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d691906138e7565b61120c576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061121b6020890189613038565b6001600160a01b03160361123a5761123485848461218b565b50611248565b6112468786858561223e565b505b6112528686612594565b611288576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa1580156112e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130c9190613904565b9050801561131e5761131e8782612624565b856001600160a01b0316876001600160a01b03167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b738287878760405161136593929190613886565b60405180910390a35061139760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b50505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6113ca81611daa565b610c8d61284a565b60006113dd81611daa565b6001600160a01b0382166114045760405163d92e233d60e01b815260040160405180910390fd5b60015461143b907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166120c7565b506114667f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83611db4565b50600154604080516001600160a01b03928316815291841660208301527f3a7b8d6372645f474fe60c115a2ef21421306a3ed4664fa0023c461413c08579910160405180910390a150600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b961151381611daa565b61151b611ea1565b611523611eff565b8460000361155d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0386166115845760405163d92e233d60e01b815260040160405180910390fd5b6115986001600160a01b03881687876128c3565b6040517fc9028a360000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063c9028a36906115dd908590600401613979565b600060405180830381600087803b1580156115f757600080fd5b505af115801561160b573d6000803e3d6000fd5b50505050866001600160a01b0316866001600160a01b03167fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e03587878787604051611658949392919061398c565b60405180910390a361139760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b600061169481611daa565b6001600160a01b0382166116bb5760405163d92e233d60e01b815260040160405180910390fd5b6000546001600160a01b0316156116fe576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117287f584a0b16e9f616d90ccec14a0b852c19aceccfd3d60699398a57dce2b0de01b983611db4565b5050600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117af5750825b905060008267ffffffffffffffff1660011480156117cc5750303b155b9050811580156117da575080155b15611811576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118725784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038816158061188f57506001600160a01b038716155b156118ad5760405163d92e233d60e01b815260040160405180910390fd5b6118b5612937565b6118bd61293f565b6118c5612937565b6118cd61294f565b6118d8600087611db4565b506119037f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611db4565b5061192e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a89611db4565b50600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a1617905561198c7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb89611db4565b50600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389161790558315611a215784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb611a5581611daa565b611a5d611ea1565b611a65611eff565b6001600160a01b038516611a8c5760405163d92e233d60e01b815260040160405180910390fd5b6000856001600160a01b03163460405160006040518083038185875af1925050503d8060008114611ad9576040519150601f19603f3d011682016040523d82523d6000602084013e611ade565b606091505b5050905080611b19576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fc9028a360000000000000000000000000000000000000000000000000000000081526001600160a01b0387169063c9028a3690611b5e908690600401613979565b600060405180830381600087803b158015611b7857600080fd5b505af1158015611b8c573d6000803e3d6000fd5b5050505060006001600160a01b0316866001600160a01b03167fde7603a6ed5d07c9f43597ccfe9043d15b66d3284f0de321f5cdf56329e6e03534888888604051611bda949392919061398c565b60405180910390a350611c0c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b611c1b611ea1565b611c23611eff565b84600003611c5d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038616611c845760405163d92e233d60e01b815260040160405180910390fd5b610400611c946060830183613671565b611c9f915084613826565b1115611cd7576040517f386691aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ce2338587611f80565b856001600160a01b0316336001600160a01b03167fc6f891b65320c682b217616a62b51f218fee95d5f0ba83e758ef9ab4ee8e975c8787878787604051611d2d9594939291906138a0565b60405180910390a3611d5e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611da081611daa565b6109d383836120c7565b610c8d813361295f565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611e97576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611e4d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107b4565b60009150506107b4565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611efd576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611f7a576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6003546001600160a01b0390811690831603611fc8576040517fe4dd681d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa15801561202b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204f91906138e7565b612085576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610b3a906001600160a01b0384811691869116846129ec565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611e97576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107b4565b60606121978383612a25565b600080856001600160a01b03163486866040516121b59291906139c3565b60006040518083038185875af1925050503d80600081146121f2576040519150601f19603f3d011682016040523d82523d6000602084013e6121f7565b606091505b509150915081612233576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150505b9392505050565b6060836001600160a01b031663676cc054348786866040518563ffffffff1660e01b8152600401612271939291906139d3565b60006040518083038185885af115801561228f573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526122b891908101906139fe565b95945050505050565b6122c9612b25565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123ea57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166123de7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15611efd576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610cab81611daa565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612486575060408051601f3d908101601f1916820190925261248391810190613904565b60015b6124cc576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114612528576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016124c3565b610b3a8383612b80565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611efd576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600060248301819052919084169063095ea7b3906044016020604051808303816000875af1158015612600573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223791906138e7565b6003546001600160a01b0390811690831603612773576002546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152602481018390529083169063095ea7b3906044016020604051808303816000875af11580156126a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ca91906138e7565b612700576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546040517f743e0c9b000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063743e0c9b90602401600060405180830381600087803b15801561275f57600080fd5b505af1158015611d5e573d6000803e3d6000fd5b6000546040517fd936547e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529091169063d936547e90602401602060405180830381865afa1580156127d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fa91906138e7565b612830576040517fac2175f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610cab906001600160a01b038481169116836128c3565b612852611ea1565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612333565b6040516001600160a01b03838116602483015260448201839052610b3a91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612bd6565b611efd612c52565b612947612c52565b611efd612cb9565b612957612c52565b611efd612cc1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610cab576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016124c3565b6040516001600160a01b0384811660248301528381166044830152606482018390526109d39186918216906323b872dd906084016128f0565b60048110610cab5781357f98933fac000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601612aaa576040517fed69977500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f36fd75ca000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821601610b3a576040517ff3459a9600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611efd576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612b8982612d12565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612bce57610b3a8282612dba565b610cab612e27565b6000612beb6001600160a01b03841683612e5f565b90508051600014158015612c10575080806020019051810190612c0e91906138e7565b155b15610b3a576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016124c3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611efd576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120a1612c52565b612cc9612c52565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b806001600160a01b03163b600003612d61576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016124c3565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051612dd79190613a6c565b600060405180830381855af49150503d8060008114612e12576040519150601f19603f3d011682016040523d82523d6000602084013e612e17565b606091505b50915091506122b8858383612e6d565b3415611efd576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606061223783836000612ee2565b606082612e8257612e7d82612f98565b612237565b8151158015612e9957506001600160a01b0384163b155b15612edb576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016124c3565b5080612237565b606081471015612f20576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016124c3565b600080856001600160a01b03168486604051612f3c9190613a6c565b60006040518083038185875af1925050503d8060008114612f79576040519150601f19603f3d011682016040523d82523d6000602084013e612f7e565b606091505b5091509150612f8e868383612e6d565b9695505050505050565b805115612fa85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215612fec57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461223757600080fd5b80356001600160a01b038116811461303357600080fd5b919050565b60006020828403121561304a57600080fd5b6122378261301c565b600060a0828403121561306557600080fd5b50919050565b6000806000806080858703121561308157600080fd5b61308a8561301c565b93506020850135925061309f6040860161301c565b9150606085013567ffffffffffffffff8111156130bb57600080fd5b6130c787828801613053565b91505092959194509250565b60008083601f8401126130e557600080fd5b50813567ffffffffffffffff8111156130fd57600080fd5b60208301915083602082850101111561311557600080fd5b9250929050565b6000806000806060858703121561313257600080fd5b61313b8561301c565b9350602085013567ffffffffffffffff81111561315757600080fd5b613163878288016130d3565b909450925050604085013567ffffffffffffffff8111156130bb57600080fd5b60006020828403121561319557600080fd5b5035919050565b600080604083850312156131af57600080fd5b823591506131bf6020840161301c565b90509250929050565b60006020828403121561306557600080fd5b600080600080606085870312156131f057600080fd5b6131fa86866131c8565b93506132086020860161301c565b9250604085013567ffffffffffffffff81111561322457600080fd5b613230878288016130d3565b95989497509550505050565b60005b8381101561325757818101518382015260200161323f565b50506000910152565b6000815180845261327881602086016020860161323c565b601f01601f19169290920160200192915050565b6020815260006122376020830184613260565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156132f7576132f761329f565b604052919050565b600067ffffffffffffffff8211156133195761331961329f565b50601f01601f191660200190565b6000806040838503121561333a57600080fd5b6133438361301c565b9150602083013567ffffffffffffffff81111561335f57600080fd5b8301601f8101851361337057600080fd5b803561338361337e826132ff565b6132ce565b81815286602083850101111561339857600080fd5b816020840160208301376000602083830101528093505050509250929050565b600080604083850312156133cb57600080fd5b6133d48361301c565b9150602083013567ffffffffffffffff8111156133f057600080fd5b6133fc85828601613053565b9150509250929050565b60008060008060008060a0878903121561341f57600080fd5b61342988886131c8565b95506134376020880161301c565b94506134456040880161301c565b935060608701359250608087013567ffffffffffffffff81111561346857600080fd5b61347489828a016130d3565b979a9699509497509295939492505050565b60006080828403121561306557600080fd5b60008060008060008060a087890312156134b157600080fd5b6134ba8761301c565b95506134c86020880161301c565b945060408701359350606087013567ffffffffffffffff8111156134eb57600080fd5b6134f789828a016130d3565b909450925050608087013567ffffffffffffffff81111561351757600080fd5b61352389828a01613486565b9150509295509295509295565b60008060006060848603121561354557600080fd5b61354e8461301c565b925061355c6020850161301c565b915061356a6040850161301c565b90509250925092565b6000806000806060858703121561358957600080fd5b6135928561301c565b9350602085013567ffffffffffffffff8111156135ae57600080fd5b6135ba878288016130d3565b909450925050604085013567ffffffffffffffff8111156135da57600080fd5b6130c787828801613486565b60008060008060008060a087890312156135ff57600080fd5b6136088761301c565b95506020870135945061361d6040880161301c565b9350606087013567ffffffffffffffff81111561363957600080fd5b61364589828a016130d3565b909450925050608087013567ffffffffffffffff81111561366557600080fd5b61352389828a01613053565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126136a657600080fd5b83018035915067ffffffffffffffff8211156136c157600080fd5b60200191503681900382131561311557600080fd5b8015158114610c8d57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261371957600080fd5b830160208101925035905067ffffffffffffffff81111561373957600080fd5b80360382131561311557600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b6001600160a01b036137848261301c565b16825260006020820135613797816136d6565b151560208401526001600160a01b036137b26040840161301c565b1660408401526137c560608301836136e4565b60a060608601526137da60a086018284613748565b6080948501359590940194909452509092915050565b8381526001600160a01b0383166020820152608060408201526000608082015260a0606082015260006122b860a0830184613773565b808201808211156107b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b604081526000613874604083018587613748565b8281036020840152612f8e8185613773565b8381526040602082015260006122b8604083018486613748565b8581526001600160a01b03851660208201526080604082015260006138c9608083018587613748565b82810360608401526138db8185613773565b98975050505050505050565b6000602082840312156138f957600080fd5b8151612237816136d6565b60006020828403121561391657600080fd5b5051919050565b6001600160a01b0361392e8261301c565b1682526001600160a01b036139456020830161301c565b16602083015260408181013590830152600061396460608301836136e4565b608060608601526122b8608086018284613748565b602081526000612237602083018461391d565b8481526060602082015260006139a6606083018587613748565b82810360408401526139b8818561391d565b979650505050505050565b8183823760009101908152919050565b6001600160a01b036139e48561301c565b1681526040602082015260006122b8604083018486613748565b600060208284031215613a1057600080fd5b815167ffffffffffffffff811115613a2757600080fd5b8201601f81018413613a3857600080fd5b8051613a4661337e826132ff565b818152856020838501011115613a5b57600080fd5b6122b882602083016020860161323c565b60008251613a7e81846020870161323c565b919091019291505056fea26469706673582212206318314aa1cc41b7cba921d67a047fb7f31d2f9bf04abea3d68242a66fc8760e64736f6c634300081a0033"; type GatewayEVMConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/IERC20Custody.sol/IERC20Custody__factory.ts b/v2/types/factories/IERC20Custody.sol/IERC20Custody__factory.ts index 8c02b01b..d89895de 100644 --- a/v2/types/factories/IERC20Custody.sol/IERC20Custody__factory.ts +++ b/v2/types/factories/IERC20Custody.sol/IERC20Custody__factory.ts @@ -55,6 +55,18 @@ const _abi = [ type: "function", name: "withdrawAndCall", inputs: [ + { + name: "messageContext", + type: "tuple", + internalType: "struct MessageContext", + components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, + ], + }, { name: "token", type: "address", diff --git a/v2/types/factories/IGatewayEVM.sol/IGatewayEVM__factory.ts b/v2/types/factories/IGatewayEVM.sol/IGatewayEVM__factory.ts index a69feb68..f9f12eed 100644 --- a/v2/types/factories/IGatewayEVM.sol/IGatewayEVM__factory.ts +++ b/v2/types/factories/IGatewayEVM.sol/IGatewayEVM__factory.ts @@ -269,30 +269,6 @@ const _abi = [ outputs: [], stateMutability: "nonpayable", }, - { - type: "function", - name: "execute", - inputs: [ - { - name: "destination", - type: "address", - internalType: "address", - }, - { - name: "data", - type: "bytes", - internalType: "bytes", - }, - ], - outputs: [ - { - name: "", - type: "bytes", - internalType: "bytes", - }, - ], - stateMutability: "payable", - }, { type: "function", name: "execute", @@ -378,6 +354,18 @@ const _abi = [ type: "function", name: "executeWithERC20", inputs: [ + { + name: "messageContext", + type: "tuple", + internalType: "struct MessageContext", + components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, + ], + }, { name: "token", type: "address", diff --git a/v2/types/factories/IReceiverEVM.sol/IReceiverEVMEvents__factory.ts b/v2/types/factories/IReceiverEVM.sol/IReceiverEVMEvents__factory.ts index 4c7287e4..4518dac5 100644 --- a/v2/types/factories/IReceiverEVM.sol/IReceiverEVMEvents__factory.ts +++ b/v2/types/factories/IReceiverEVM.sol/IReceiverEVMEvents__factory.ts @@ -87,7 +87,20 @@ const _abi = [ { type: "event", name: "ReceivedOnCall", - inputs: [], + inputs: [ + { + name: "sender", + type: "address", + indexed: false, + internalType: "address", + }, + { + name: "message", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + ], anonymous: false, }, { diff --git a/v2/types/factories/ReceiverEVM__factory.ts b/v2/types/factories/ReceiverEVM__factory.ts index 176bf92d..60aaa15d 100644 --- a/v2/types/factories/ReceiverEVM__factory.ts +++ b/v2/types/factories/ReceiverEVM__factory.ts @@ -25,7 +25,7 @@ const _abi = [ name: "onCall", inputs: [ { - name: "", + name: "messageContext", type: "tuple", internalType: "struct MessageContext", components: [ @@ -37,7 +37,7 @@ const _abi = [ ], }, { - name: "", + name: "message", type: "bytes", internalType: "bytes", }, @@ -263,7 +263,20 @@ const _abi = [ { type: "event", name: "ReceivedOnCall", - inputs: [], + inputs: [ + { + name: "sender", + type: "address", + indexed: false, + internalType: "address", + }, + { + name: "message", + type: "bytes", + indexed: false, + internalType: "bytes", + }, + ], anonymous: false, }, { @@ -395,7 +408,7 @@ const _abi = [ ] as const; const _bytecode = - "0x6080604052348015600f57600080fd5b506001600055610e9e806100246000396000f3fe60806040526004361061006e5760003560e01c8063c51316911161004b578063c5131691146100d5578063c9028a36146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a214610077578063676cc054146100975780636ed70169146100c057005b3661007557005b005b34801561008357600080fd5b506100756100923660046106ec565b610148565b6100aa6100a5366004610728565b6101de565b6040516100b79190610823565b60405180910390f35b3480156100cc57600080fd5b50610075610222565b3480156100e157600080fd5b506100756100f03660046106ec565b610257565b34801561010157600080fd5b50610075610110366004610836565b610332565b610075610123366004610996565b61036e565b34801561013457600080fd5b50610075610143366004610a82565b6103b2565b6101506103e7565b61017273ffffffffffffffffffffffffffffffffffffffff831633838661042a565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b6040516060907f3658b46bab672c7672b69c2f0feda706eabdb7d2231421c96e9049b2db5e7eee90600090a1506040805160208101909152600081525b9392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61025f6103e7565b600061026c600285610b6c565b9050806000036102a8576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102ca73ffffffffffffffffffffffffffffffffffffffff841633848461042a565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f689a5a5cb55e795ffe4cd8b419cd3bb0a3373974c54d25f64e734d7388b93e9b3382604051610363929190610bf0565b60405180910390a150565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa33348585856040516103a5959493929190610ce2565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103a59493929190610d6c565b600260005403610423576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104bf9085906104c5565b50505050565b60006104e773ffffffffffffffffffffffffffffffffffffffff841683610560565b9050805160001415801561050c57508080602001905181019061050a9190610e2f565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061021b83836000846000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105939190610e4c565b60006040518083038185875af1925050503d80600081146105d0576040519150601f19603f3d011682016040523d82523d6000602084013e6105d5565b606091505b50915091506105e58683836105ef565b9695505050505050565b606082610604576105ff8261067e565b61021b565b8151158015610628575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610677576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610557565b508061021b565b80511561068e5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff811681146106e757600080fd5b919050565b60008060006060848603121561070157600080fd5b83359250610711602085016106c3565b915061071f604085016106c3565b90509250925092565b6000806000838503604081121561073e57600080fd5b602081121561074c57600080fd5b50839250602084013567ffffffffffffffff81111561076a57600080fd5b8401601f8101861361077b57600080fd5b803567ffffffffffffffff81111561079257600080fd5b8660208284010111156107a457600080fd5b939660209190910195509293505050565b60005b838110156107d05781810151838201526020016107b8565b50506000910152565b600081518084526107f18160208601602086016107b5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061021b60208301846107d9565b60006020828403121561084857600080fd5b813567ffffffffffffffff81111561085f57600080fd5b82016080818503121561021b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156108e7576108e7610871565b604052919050565b600082601f83011261090057600080fd5b813567ffffffffffffffff81111561091a5761091a610871565b61094b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108a0565b81815284602083860101111561096057600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106c057600080fd5b80356106e78161097d565b6000806000606084860312156109ab57600080fd5b833567ffffffffffffffff8111156109c257600080fd5b6109ce868287016108ef565b9350506020840135915060408401356109e68161097d565b809150509250925092565b600067ffffffffffffffff821115610a0b57610a0b610871565b5060051b60200190565b600082601f830112610a2657600080fd5b8135610a39610a34826109f1565b6108a0565b8082825260208201915060208360051b860101925085831115610a5b57600080fd5b602085015b83811015610a78578035835260209283019201610a60565b5095945050505050565b600080600060608486031215610a9757600080fd5b833567ffffffffffffffff811115610aae57600080fd5b8401601f81018613610abf57600080fd5b8035610acd610a34826109f1565b8082825260208201915060208360051b850101925088831115610aef57600080fd5b602084015b83811015610b3157803567ffffffffffffffff811115610b1357600080fd5b610b228b6020838901016108ef565b84525060209283019201610af4565b509550505050602084013567ffffffffffffffff811115610b5157600080fd5b610b5d86828701610a15565b92505061071f6040850161098b565b600082610ba2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c2e836106c3565b16604082015273ffffffffffffffffffffffffffffffffffffffff610c55602084016106c3565b166060820152600080604084013590508060808401525060608301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610ca157600080fd5b830160208101903567ffffffffffffffff811115610cbe57600080fd5b803603821315610ccd57600080fd5b608060a08501526105e560c085018284610ba7565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d1760a08301866107d9565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610d62578151865260209586019590910190600101610d44565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610dff577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610dea8583516107d9565b94506020938401939190910190600101610db0565b505050508281036040840152610e158186610d30565b915050610e26606083018415159052565b95945050505050565b600060208284031215610e4157600080fd5b815161021b8161097d565b60008251610e5e8184602087016107b5565b919091019291505056fea26469706673582212200121b4788f0b35a4b6df21db4f43708a9b20e8b16f616e6f3300230e75bbdd1364736f6c634300081a0033"; + "0x6080604052348015600f57600080fd5b506001600055610f06806100246000396000f3fe60806040526004361061006e5760003560e01c8063c51316911161004b578063c5131691146100d5578063c9028a36146100f5578063e04d4f9714610115578063f05b6abf1461012857005b8063357fc5a214610077578063676cc054146100975780636ed70169146100c057005b3661007557005b005b34801561008357600080fd5b50610075610092366004610709565b610148565b6100aa6100a5366004610745565b6101de565b6040516100b79190610840565b60405180910390f35b3480156100cc57600080fd5b5061007561023f565b3480156100e157600080fd5b506100756100f0366004610709565b610274565b34801561010157600080fd5b50610075610110366004610853565b61034f565b6100756101233660046109b3565b61038b565b34801561013457600080fd5b50610075610143366004610a9f565b6103cf565b610150610404565b61017273ffffffffffffffffffffffffffffffffffffffff8316338386610447565b604080513381526020810185905273ffffffffffffffffffffffffffffffffffffffff848116828401528316606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a16101d96001600055565b505050565b60607fd80b62959d9a7e797f352e4015e65d345f402ea21972256fb0ba94f00a35250161020e6020860186610b89565b848460405161021f93929190610bed565b60405180910390a1506040805160208101909152600081525b9392505050565b6040513381527fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a09060200160405180910390a1565b61027c610404565b6000610289600285610c26565b9050806000036102c5576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102e773ffffffffffffffffffffffffffffffffffffffff8416338484610447565b604080513381526020810183905273ffffffffffffffffffffffffffffffffffffffff858116828401528416606082015290517f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af609181900360800190a1506101d96001600055565b7f689a5a5cb55e795ffe4cd8b419cd3bb0a3373974c54d25f64e734d7388b93e9b3382604051610380929190610c61565b60405180910390a150565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa33348585856040516103c2959493929190610d53565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516103c29493929190610ddd565b600260005403610440576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600055565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790526104dc9085906104e2565b50505050565b600061050473ffffffffffffffffffffffffffffffffffffffff84168361057d565b905080516000141580156105295750808060200190518101906105279190610e97565b155b156101d9576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b606061023883836000846000808573ffffffffffffffffffffffffffffffffffffffff1684866040516105b09190610eb4565b60006040518083038185875af1925050503d80600081146105ed576040519150601f19603f3d011682016040523d82523d6000602084013e6105f2565b606091505b509150915061060286838361060c565b9695505050505050565b6060826106215761061c8261069b565b610238565b8151158015610645575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610694576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610574565b5080610238565b8051156106ab5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff8116811461070457600080fd5b919050565b60008060006060848603121561071e57600080fd5b8335925061072e602085016106e0565b915061073c604085016106e0565b90509250925092565b6000806000838503604081121561075b57600080fd5b602081121561076957600080fd5b50839250602084013567ffffffffffffffff81111561078757600080fd5b8401601f8101861361079857600080fd5b803567ffffffffffffffff8111156107af57600080fd5b8660208284010111156107c157600080fd5b939660209190910195509293505050565b60005b838110156107ed5781810151838201526020016107d5565b50506000910152565b6000815180845261080e8160208601602086016107d2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061023860208301846107f6565b60006020828403121561086557600080fd5b813567ffffffffffffffff81111561087c57600080fd5b82016080818503121561023857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156109045761090461088e565b604052919050565b600082601f83011261091d57600080fd5b813567ffffffffffffffff8111156109375761093761088e565b61096860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016108bd565b81815284602083860101111561097d57600080fd5b816020850160208301376000918101602001919091529392505050565b80151581146106dd57600080fd5b80356107048161099a565b6000806000606084860312156109c857600080fd5b833567ffffffffffffffff8111156109df57600080fd5b6109eb8682870161090c565b935050602084013591506040840135610a038161099a565b809150509250925092565b600067ffffffffffffffff821115610a2857610a2861088e565b5060051b60200190565b600082601f830112610a4357600080fd5b8135610a56610a5182610a0e565b6108bd565b8082825260208201915060208360051b860101925085831115610a7857600080fd5b602085015b83811015610a95578035835260209283019201610a7d565b5095945050505050565b600080600060608486031215610ab457600080fd5b833567ffffffffffffffff811115610acb57600080fd5b8401601f81018613610adc57600080fd5b8035610aea610a5182610a0e565b8082825260208201915060208360051b850101925088831115610b0c57600080fd5b602084015b83811015610b4e57803567ffffffffffffffff811115610b3057600080fd5b610b3f8b60208389010161090c565b84525060209283019201610b11565b509550505050602084013567ffffffffffffffff811115610b6e57600080fd5b610b7a86828701610a32565b92505061073c604085016109a8565b600060208284031215610b9b57600080fd5b610238826106e0565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff84168152604060208201526000610c1d604083018486610ba4565b95945050505050565b600082610c5c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015273ffffffffffffffffffffffffffffffffffffffff610c9f836106e0565b16604082015273ffffffffffffffffffffffffffffffffffffffff610cc6602084016106e0565b166060820152600080604084013590508060808401525060608301357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610d1257600080fd5b830160208101903567ffffffffffffffff811115610d2f57600080fd5b803603821315610d3e57600080fd5b608060a085015261060260c085018284610ba4565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260a060408201526000610d8860a08301866107f6565b6060830194909452509015156080909101529392505050565b600081518084526020840193506020830160005b82811015610dd3578151865260209586019590910190600101610db5565b5093949350505050565b60006080820173ffffffffffffffffffffffffffffffffffffffff871683526080602084015280865180835260a08501915060a08160051b86010192506020880160005b82811015610e70577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60878603018452610e5b8583516107f6565b94506020938401939190910190600101610e21565b505050508281036040840152610e868186610da1565b915050610c1d606083018415159052565b600060208284031215610ea957600080fd5b81516102388161099a565b60008251610ec68184602087016107d2565b919091019291505056fea2646970667358221220a40191c0a0256363e6edb7673accb387b7a3597d9a76c64faccadc4ce57c234664736f6c634300081a0033"; type ReceiverEVMConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/ZetaConnectorBase__factory.ts b/v2/types/factories/ZetaConnectorBase__factory.ts index ed95a844..0f161387 100644 --- a/v2/types/factories/ZetaConnectorBase__factory.ts +++ b/v2/types/factories/ZetaConnectorBase__factory.ts @@ -355,6 +355,18 @@ const _abi = [ type: "function", name: "withdrawAndCall", inputs: [ + { + name: "messageContext", + type: "tuple", + internalType: "struct MessageContext", + components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, + ], + }, { name: "to", type: "address", diff --git a/v2/types/factories/ZetaConnectorNativeUpgradeTest__factory.ts b/v2/types/factories/ZetaConnectorNativeUpgradeTest__factory.ts index f12ed906..9370cce2 100644 --- a/v2/types/factories/ZetaConnectorNativeUpgradeTest__factory.ts +++ b/v2/types/factories/ZetaConnectorNativeUpgradeTest__factory.ts @@ -361,6 +361,18 @@ const _abi = [ type: "function", name: "withdrawAndCall", inputs: [ + { + name: "messageContext", + type: "tuple", + internalType: "struct MessageContext", + components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, + ], + }, { name: "to", type: "address", @@ -839,7 +851,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a060405230608052348015601357600080fd5b5060805161248461003d6000396000818161125d01528181611286015261145c01526124846000f3fe6080604052600436106101965760003560e01c80635e3e9fef116100e1578063950837aa1161008a578063ad3cb1cc11610064578063ad3cb1cc146104f2578063d547741f14610548578063e63ab1e914610568578063f8c8765e1461059c57600080fd5b8063950837aa14610489578063a217fddf146104a9578063a783c789146104be57600080fd5b80638456cb59116100bb5780638456cb59146103db57806385f438c1146103f057806391d148541461042457600080fd5b80635e3e9fef1461037b5780636f8728ad1461039b578063743e0c9b146103bb57600080fd5b806336568abe1161014357806352d1902d1161011d57806352d1902d1461030f5780635b112591146103245780635c975abb1461034457600080fd5b806336568abe146102c75780633f4ba83a146102e75780634f1ef286146102fc57600080fd5b806321e093b11161017457806321e093b11461022a578063248a9ca31461024a5780632f2ff15d146102a757600080fd5b806301ffc9a71461019b578063106e6290146101d0578063116191b6146101f2575b600080fd5b3480156101a757600080fd5b506101bb6101b6366004611dea565b6105bc565b60405190151581526020015b60405180910390f35b3480156101dc57600080fd5b506101f06101eb366004611e48565b610655565b005b3480156101fe57600080fd5b50600054610212906001600160a01b031681565b6040516001600160a01b0390911681526020016101c7565b34801561023657600080fd5b50600154610212906001600160a01b031681565b34801561025657600080fd5b50610299610265366004611e7b565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101c7565b3480156102b357600080fd5b506101f06102c2366004611e94565b610718565b3480156102d357600080fd5b506101f06102e2366004611e94565b610762565b3480156102f357600080fd5b506101f06107ae565b6101f061030a366004611eef565b6107e3565b34801561031b57600080fd5b50610299610802565b34801561033057600080fd5b50600254610212906001600160a01b031681565b34801561035057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101bb565b34801561038757600080fd5b506101f061039636600461203f565b610831565b3480156103a757600080fd5b506101f06103b63660046120a1565b610985565b3480156103c757600080fd5b506101f06103d6366004611e7b565b610ade565b3480156103e757600080fd5b506101f0610afe565b3480156103fc57600080fd5b506102997f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561043057600080fd5b506101bb61043f366004611e94565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561049557600080fd5b506101f06104a4366004612139565b610b30565b3480156104b557600080fd5b50610299600081565b3480156104ca57600080fd5b506102997f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156104fe57600080fd5b5061053b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101c79190612178565b34801561055457600080fd5b506101f0610563366004611e94565b610cc3565b34801561057457600080fd5b506102997f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105a857600080fd5b506101f06105b73660046121c9565b610d07565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061064f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61065d610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461068781610f0f565b61068f610f19565b6001546106a6906001600160a01b03168585610f77565b836001600160a01b03167f3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee9846040516106e191815260200190565b60405180910390a25061071360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461075281610f0f565b61075c8383611011565b50505050565b6001600160a01b03811633146107a4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61071382826110fe565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107d881610f0f565b6107e06111c2565b50565b6107eb611252565b6107f482611322565b6107fe828261132d565b5050565b600061080c611451565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610839610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461086381610f0f565b61086b610f19565b600054600154610888916001600160a01b03918216911687610f77565b6000546001546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692635131ab59926108dd929116908a908a908a908a90600401612266565b600060405180830381600087803b1580156108f757600080fd5b505af115801561090b573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d86868660405161094c939291906122a9565b60405180910390a25061097e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b61098d610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109b781610f0f565b6109bf610f19565b6000546001546109dc916001600160a01b03918216911688610f77565b6000546001546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263aa0c0fc192610a33929116908b908b908b908b908a90600401612374565b600060405180830381600087803b158015610a4d57600080fd5b505af1158015610a61573d6000803e3d6000fd5b50505050866001600160a01b03167f5272d2fee39bff41b2e763562526315906046373ce08a7bacf76c3080d731ff087878786604051610aa494939291906123cb565b60405180910390a250610ad660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b610ae6610f19565b6001546107e0906001600160a01b03163330846114b3565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b2881610f0f565b6107e06114ec565b6000610b3b81610f0f565b6001600160a01b038216610b7b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610bb2907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166110fe565b50600254610bea907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166110fe565b50610c157f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483611011565b50610c407f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83611011565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610cfd81610f0f565b61075c83836110fe565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d525750825b905060008267ffffffffffffffff166001148015610d6f5750303b155b905081158015610d7d575080155b15610db4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610e155784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610e2189898989611565565b8315610e835784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01610f09576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6107e08133611870565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610f75576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261071391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506118fd565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166110f4576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556110aa3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061064f565b600091505061064f565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156110f4576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061064f565b6111ca611979565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806112eb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112df7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610f75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107fe81610f0f565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113a5575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526113a2918101906123f7565b60015b6113eb576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611447576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016113e2565b61071383836119d4565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b03848116602483015283811660448301526064820183905261075c9186918216906323b872dd90608401610fa4565b6114f4610f19565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611234565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115b05750825b905060008267ffffffffffffffff1660011480156115cd5750303b155b9050811580156115db575080155b15611612576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116735784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061169057506001600160a01b038816155b806116a257506001600160a01b038716155b806116b457506001600160a01b038616155b156116eb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116f3611a2a565b6116fb611a32565b611703611a2a565b61170b611a42565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b16919092161790556117669087611011565b506117917f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e488611011565b506117bc7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb88611011565b506117e77f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611011565b506118127f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a88611011565b508315610e835784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610e7a565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166107fe576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016113e2565b60006119126001600160a01b03841683611a52565b905080516000141580156119375750808060200190518101906119359190612410565b155b15610713576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016113e2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610f75576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119dd82611a67565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611a22576107138282611b0f565b6107fe611b85565b610f75611bbd565b611a3a611bbd565b610f75611c24565b611a4a611bbd565b610f75611c2c565b6060611a6083836000611c7d565b9392505050565b806001600160a01b03163b600003611ab6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016113e2565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611b2c9190612432565b600060405180830381855af49150503d8060008114611b67576040519150601f19603f3d011682016040523d82523d6000602084013e611b6c565b606091505b5091509150611b7c858383611d33565b95945050505050565b3415610f75576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610f75576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610feb611bbd565b611c34611bbd565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606081471015611cbb576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016113e2565b600080856001600160a01b03168486604051611cd79190612432565b60006040518083038185875af1925050503d8060008114611d14576040519150601f19603f3d011682016040523d82523d6000602084013e611d19565b606091505b5091509150611d29868383611d33565b9695505050505050565b606082611d4857611d4382611da8565b611a60565b8151158015611d5f57506001600160a01b0384163b155b15611da1576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016113e2565b5080611a60565b805115611db85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611dfc57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611a6057600080fd5b80356001600160a01b0381168114611e4357600080fd5b919050565b600080600060608486031215611e5d57600080fd5b611e6684611e2c565b95602085013595506040909401359392505050565b600060208284031215611e8d57600080fd5b5035919050565b60008060408385031215611ea757600080fd5b82359150611eb760208401611e2c565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611f0257600080fd5b611f0b83611e2c565b9150602083013567ffffffffffffffff811115611f2757600080fd5b8301601f81018513611f3857600080fd5b803567ffffffffffffffff811115611f5257611f52611ec0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715611fbe57611fbe611ec0565b604052818152828201602001871015611fd657600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008083601f84011261200857600080fd5b50813567ffffffffffffffff81111561202057600080fd5b60208301915083602082850101111561203857600080fd5b9250929050565b60008060008060006080868803121561205757600080fd5b61206086611e2c565b945060208601359350604086013567ffffffffffffffff81111561208357600080fd5b61208f88828901611ff6565b96999598509660600135949350505050565b60008060008060008060a087890312156120ba57600080fd5b6120c387611e2c565b955060208701359450604087013567ffffffffffffffff8111156120e657600080fd5b6120f289828a01611ff6565b90955093505060608701359150608087013567ffffffffffffffff81111561211957600080fd5b87016080818a03121561212b57600080fd5b809150509295509295509295565b60006020828403121561214b57600080fd5b611a6082611e2c565b60005b8381101561216f578181015183820152602001612157565b50506000910152565b6020815260008251806020840152612197816040850160208701612154565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080600080608085870312156121df57600080fd5b6121e885611e2c565b93506121f660208601611e2c565b925061220460408601611e2c565b915061221260608601611e2c565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061229e60808301848661221d565b979650505050505050565b838152604060208201526000611b7c60408301848661221d565b6001600160a01b036122d482611e2c565b1682526001600160a01b036122eb60208301611e2c565b1660208301526040818101359083015260006060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261233357600080fd5b820160208101903567ffffffffffffffff81111561235057600080fd5b80360382131561235f57600080fd5b60806060860152611b7c60808601828461221d565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006123ac60a08301858761221d565b82810360808401526123be81856122c3565b9998505050505050505050565b8481526060602082015260006123e560608301858761221d565b828103604084015261229e81856122c3565b60006020828403121561240957600080fd5b5051919050565b60006020828403121561242257600080fd5b81518015158114611a6057600080fd5b60008251612444818460208701612154565b919091019291505056fea264697066735822122088a3c4caa6fac6e05897ea5aa5d2d7bfd7475716ebc3036a69e9eb83e9e72f2c64736f6c634300081a0033"; + "0x60a060405230608052348015601357600080fd5b5060805161248e61003d60003960008181611227015281816112500152611426015261248e6000f3fe6080604052600436106101965760003560e01c80636f8728ad116100e1578063950837aa1161008a578063ad3cb1cc11610064578063ad3cb1cc146104f2578063d547741f14610548578063e63ab1e914610568578063f8c8765e1461059c57600080fd5b8063950837aa14610489578063a217fddf146104a9578063a783c789146104be57600080fd5b80638456cb59116100bb5780638456cb59146103db57806385f438c1146103f057806391d148541461042457600080fd5b80636f8728ad1461037b5780636fb9a7af1461039b578063743e0c9b146103bb57600080fd5b806336568abe1161014357806352d1902d1161011d57806352d1902d1461030f5780635b112591146103245780635c975abb1461034457600080fd5b806336568abe146102c75780633f4ba83a146102e75780634f1ef286146102fc57600080fd5b806321e093b11161017457806321e093b11461022a578063248a9ca31461024a5780632f2ff15d146102a757600080fd5b806301ffc9a71461019b578063106e6290146101d0578063116191b6146101f2575b600080fd5b3480156101a757600080fd5b506101bb6101b6366004611db4565b6105bc565b60405190151581526020015b60405180910390f35b3480156101dc57600080fd5b506101f06101eb366004611e12565b610655565b005b3480156101fe57600080fd5b50600054610212906001600160a01b031681565b6040516001600160a01b0390911681526020016101c7565b34801561023657600080fd5b50600154610212906001600160a01b031681565b34801561025657600080fd5b50610299610265366004611e45565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101c7565b3480156102b357600080fd5b506101f06102c2366004611e5e565b610718565b3480156102d357600080fd5b506101f06102e2366004611e5e565b610762565b3480156102f357600080fd5b506101f06107ae565b6101f061030a366004611eb9565b6107e3565b34801561031b57600080fd5b50610299610802565b34801561033057600080fd5b50600254610212906001600160a01b031681565b34801561035057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101bb565b34801561038757600080fd5b506101f0610396366004612009565b610831565b3480156103a757600080fd5b506101f06103b63660046120a1565b61098a565b3480156103c757600080fd5b506101f06103d6366004611e45565b610aa8565b3480156103e757600080fd5b506101f0610ac8565b3480156103fc57600080fd5b506102997f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561043057600080fd5b506101bb61043f366004611e5e565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561049557600080fd5b506101f06104a4366004612120565b610afa565b3480156104b557600080fd5b50610299600081565b3480156104ca57600080fd5b506102997f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156104fe57600080fd5b5061053b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101c7919061215f565b34801561055457600080fd5b506101f0610563366004611e5e565b610c8d565b34801561057457600080fd5b506102997f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105a857600080fd5b506101f06105b73660046121b0565b610cd1565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061064f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61065d610e58565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461068781610ed9565b61068f610ee3565b6001546106a6906001600160a01b03168585610f41565b836001600160a01b03167f3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee9846040516106e191815260200190565b60405180910390a25061071360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461075281610ed9565b61075c8383610fdb565b50505050565b6001600160a01b03811633146107a4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61071382826110c8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107d881610ed9565b6107e061118c565b50565b6107eb61121c565b6107f4826112ec565b6107fe82826112f7565b5050565b600061080c61141b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610839610e58565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461086381610ed9565b61086b610ee3565b600054600154610888916001600160a01b03918216911688610f41565b6000546001546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263aa0c0fc1926108df929116908b908b908b908b908a906004016122fe565b600060405180830381600087803b1580156108f957600080fd5b505af115801561090d573d6000803e3d6000fd5b50505050866001600160a01b03167f5272d2fee39bff41b2e763562526315906046373ce08a7bacf76c3080d731ff0878787866040516109509493929190612355565b60405180910390a25061098260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b610992610e58565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109bc81610ed9565b6109c4610ee3565b6000546001546109e1916001600160a01b03918216911687610f41565b6000546001546040517f7bbe9afa0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692637bbe9afa92610a39928c92909116908b908b908b908b9060040161238c565b600060405180830381600087803b158015610a5357600080fd5b505af1158015610a67573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d868686604051610950939291906123e7565b610ab0610ee3565b6001546107e0906001600160a01b031633308461147d565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610af281610ed9565b6107e06114b6565b6000610b0581610ed9565b6001600160a01b038216610b45576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610b7c907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166110c8565b50600254610bb4907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166110c8565b50610bdf7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610fdb565b50610c0a7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610fdb565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610cc781610ed9565b61075c83836110c8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d1c5750825b905060008267ffffffffffffffff166001148015610d395750303b155b905081158015610d47575080155b15610d7e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610ddf5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610deb8989898961152f565b8315610e4d5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01610ed3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6107e0813361183a565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610f3f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261071391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506118c7565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166110be576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556110743390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061064f565b600091505061064f565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156110be576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061064f565b611194611943565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806112b557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112a97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610f3f576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107fe81610ed9565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561136f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261136c91810190612401565b60015b6113b5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611411576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016113ac565b610713838361199e565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f3f576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b03848116602483015283811660448301526064820183905261075c9186918216906323b872dd90608401610f6e565b6114be610ee3565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336111fe565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561157a5750825b905060008267ffffffffffffffff1660011480156115975750303b155b9050811580156115a5575080155b156115dc576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561163d5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061165a57506001600160a01b038816155b8061166c57506001600160a01b038716155b8061167e57506001600160a01b038616155b156116b5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116bd6119f4565b6116c56119fc565b6116cd6119f4565b6116d5611a0c565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b16919092161790556117309087610fdb565b5061175b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e488610fdb565b506117867f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb88610fdb565b506117b17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87610fdb565b506117dc7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a88610fdb565b508315610e4d5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610e44565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166107fe576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016113ac565b60006118dc6001600160a01b03841683611a1c565b905080516000141580156119015750808060200190518101906118ff919061241a565b155b15610713576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016113ac565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610f3f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119a782611a31565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156119ec576107138282611ad9565b6107fe611b4f565b610f3f611b87565b611a04611b87565b610f3f611bee565b611a14611b87565b610f3f611bf6565b6060611a2a83836000611c47565b9392505050565b806001600160a01b03163b600003611a80576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016113ac565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611af6919061243c565b600060405180830381855af49150503d8060008114611b31576040519150601f19603f3d011682016040523d82523d6000602084013e611b36565b606091505b5091509150611b46858383611cfd565b95945050505050565b3415610f3f576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610f3f576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fb5611b87565b611bfe611b87565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606081471015611c85576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016113ac565b600080856001600160a01b03168486604051611ca1919061243c565b60006040518083038185875af1925050503d8060008114611cde576040519150601f19603f3d011682016040523d82523d6000602084013e611ce3565b606091505b5091509150611cf3868383611cfd565b9695505050505050565b606082611d1257611d0d82611d72565b611a2a565b8151158015611d2957506001600160a01b0384163b155b15611d6b576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016113ac565b5080611a2a565b805115611d825780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611dc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611a2a57600080fd5b80356001600160a01b0381168114611e0d57600080fd5b919050565b600080600060608486031215611e2757600080fd5b611e3084611df6565b95602085013595506040909401359392505050565b600060208284031215611e5757600080fd5b5035919050565b60008060408385031215611e7157600080fd5b82359150611e8160208401611df6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611ecc57600080fd5b611ed583611df6565b9150602083013567ffffffffffffffff811115611ef157600080fd5b8301601f81018513611f0257600080fd5b803567ffffffffffffffff811115611f1c57611f1c611e8a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715611f8857611f88611e8a565b604052818152828201602001871015611fa057600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008083601f840112611fd257600080fd5b50813567ffffffffffffffff811115611fea57600080fd5b60208301915083602082850101111561200257600080fd5b9250929050565b60008060008060008060a0878903121561202257600080fd5b61202b87611df6565b955060208701359450604087013567ffffffffffffffff81111561204e57600080fd5b61205a89828a01611fc0565b90955093505060608701359150608087013567ffffffffffffffff81111561208157600080fd5b87016080818a03121561209357600080fd5b809150509295509295509295565b60008060008060008086880360a08112156120bb57600080fd5b60208112156120c957600080fd5b508695506120d960208801611df6565b945060408701359350606087013567ffffffffffffffff8111156120fc57600080fd5b61210889828a01611fc0565b979a9699509497949695608090950135949350505050565b60006020828403121561213257600080fd5b611a2a82611df6565b60005b8381101561215657818101518382015260200161213e565b50506000910152565b602081526000825180602084015261217e81604085016020870161213b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080600080608085870312156121c657600080fd5b6121cf85611df6565b93506121dd60208601611df6565b92506121eb60408601611df6565b91506121f960608601611df6565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b0361225e82611df6565b1682526001600160a01b0361227560208301611df6565b1660208301526040818101359083015260006060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126122bd57600080fd5b820160208101903567ffffffffffffffff8111156122da57600080fd5b8036038213156122e957600080fd5b60806060860152611b46608086018284612204565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061233660a083018587612204565b8281036080840152612348818561224d565b9998505050505050505050565b84815260606020820152600061236f606083018587612204565b8281036040840152612381818561224d565b979650505050505050565b6001600160a01b0361239d88611df6565b1681526001600160a01b03861660208201526001600160a01b038516604082015283606082015260a0608082015260006123db60a083018486612204565b98975050505050505050565b838152604060208201526000611b46604083018486612204565b60006020828403121561241357600080fd5b5051919050565b60006020828403121561242c57600080fd5b81518015158114611a2a57600080fd5b6000825161244e81846020870161213b565b919091019291505056fea2646970667358221220bcbb03f51aa2eaaa2c095aeb1e255f05ceb9dfc2e6212a91694846fedf0f865564736f6c634300081a0033"; type ZetaConnectorNativeUpgradeTestConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/ZetaConnectorNative__factory.ts b/v2/types/factories/ZetaConnectorNative__factory.ts index 228ac812..fa33c076 100644 --- a/v2/types/factories/ZetaConnectorNative__factory.ts +++ b/v2/types/factories/ZetaConnectorNative__factory.ts @@ -361,6 +361,18 @@ const _abi = [ type: "function", name: "withdrawAndCall", inputs: [ + { + name: "messageContext", + type: "tuple", + internalType: "struct MessageContext", + components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, + ], + }, { name: "to", type: "address", @@ -820,7 +832,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a060405230608052348015601357600080fd5b5060805161248461003d6000396000818161125d01528181611286015261145c01526124846000f3fe6080604052600436106101965760003560e01c80635e3e9fef116100e1578063950837aa1161008a578063ad3cb1cc11610064578063ad3cb1cc146104f2578063d547741f14610548578063e63ab1e914610568578063f8c8765e1461059c57600080fd5b8063950837aa14610489578063a217fddf146104a9578063a783c789146104be57600080fd5b80638456cb59116100bb5780638456cb59146103db57806385f438c1146103f057806391d148541461042457600080fd5b80635e3e9fef1461037b5780636f8728ad1461039b578063743e0c9b146103bb57600080fd5b806336568abe1161014357806352d1902d1161011d57806352d1902d1461030f5780635b112591146103245780635c975abb1461034457600080fd5b806336568abe146102c75780633f4ba83a146102e75780634f1ef286146102fc57600080fd5b806321e093b11161017457806321e093b11461022a578063248a9ca31461024a5780632f2ff15d146102a757600080fd5b806301ffc9a71461019b578063106e6290146101d0578063116191b6146101f2575b600080fd5b3480156101a757600080fd5b506101bb6101b6366004611dea565b6105bc565b60405190151581526020015b60405180910390f35b3480156101dc57600080fd5b506101f06101eb366004611e48565b610655565b005b3480156101fe57600080fd5b50600054610212906001600160a01b031681565b6040516001600160a01b0390911681526020016101c7565b34801561023657600080fd5b50600154610212906001600160a01b031681565b34801561025657600080fd5b50610299610265366004611e7b565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101c7565b3480156102b357600080fd5b506101f06102c2366004611e94565b610718565b3480156102d357600080fd5b506101f06102e2366004611e94565b610762565b3480156102f357600080fd5b506101f06107ae565b6101f061030a366004611eef565b6107e3565b34801561031b57600080fd5b50610299610802565b34801561033057600080fd5b50600254610212906001600160a01b031681565b34801561035057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101bb565b34801561038757600080fd5b506101f061039636600461203f565b610831565b3480156103a757600080fd5b506101f06103b63660046120a1565b610985565b3480156103c757600080fd5b506101f06103d6366004611e7b565b610ade565b3480156103e757600080fd5b506101f0610afe565b3480156103fc57600080fd5b506102997f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561043057600080fd5b506101bb61043f366004611e94565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561049557600080fd5b506101f06104a4366004612139565b610b30565b3480156104b557600080fd5b50610299600081565b3480156104ca57600080fd5b506102997f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156104fe57600080fd5b5061053b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101c79190612178565b34801561055457600080fd5b506101f0610563366004611e94565b610cc3565b34801561057457600080fd5b506102997f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105a857600080fd5b506101f06105b73660046121c9565b610d07565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061064f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61065d610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461068781610f0f565b61068f610f19565b6001546106a6906001600160a01b03168585610f77565b836001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5846040516106e191815260200190565b60405180910390a25061071360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461075281610f0f565b61075c8383611011565b50505050565b6001600160a01b03811633146107a4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61071382826110fe565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107d881610f0f565b6107e06111c2565b50565b6107eb611252565b6107f482611322565b6107fe828261132d565b5050565b600061080c611451565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610839610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461086381610f0f565b61086b610f19565b600054600154610888916001600160a01b03918216911687610f77565b6000546001546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692635131ab59926108dd929116908a908a908a908a90600401612266565b600060405180830381600087803b1580156108f757600080fd5b505af115801561090b573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d86868660405161094c939291906122a9565b60405180910390a25061097e60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b61098d610e8e565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109b781610f0f565b6109bf610f19565b6000546001546109dc916001600160a01b03918216911688610f77565b6000546001546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263aa0c0fc192610a33929116908b908b908b908b908a90600401612374565b600060405180830381600087803b158015610a4d57600080fd5b505af1158015610a61573d6000803e3d6000fd5b50505050866001600160a01b03167f5272d2fee39bff41b2e763562526315906046373ce08a7bacf76c3080d731ff087878786604051610aa494939291906123cb565b60405180910390a250610ad660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b610ae6610f19565b6001546107e0906001600160a01b03163330846114b3565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b2881610f0f565b6107e06114ec565b6000610b3b81610f0f565b6001600160a01b038216610b7b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610bb2907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166110fe565b50600254610bea907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166110fe565b50610c157f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483611011565b50610c407f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83611011565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610cfd81610f0f565b61075c83836110fe565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d525750825b905060008267ffffffffffffffff166001148015610d6f5750303b155b905081158015610d7d575080155b15610db4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610e155784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610e2189898989611565565b8315610e835784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01610f09576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6107e08133611870565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610f75576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261071391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506118fd565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166110f4576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556110aa3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061064f565b600091505061064f565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156110f4576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061064f565b6111ca611979565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806112eb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112df7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610f75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107fe81610f0f565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113a5575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526113a2918101906123f7565b60015b6113eb576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611447576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016113e2565b61071383836119d4565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f75576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b03848116602483015283811660448301526064820183905261075c9186918216906323b872dd90608401610fa4565b6114f4610f19565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611234565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156115b05750825b905060008267ffffffffffffffff1660011480156115cd5750303b155b9050811580156115db575080155b15611612576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156116735784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061169057506001600160a01b038816155b806116a257506001600160a01b038716155b806116b457506001600160a01b038616155b156116eb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116f3611a2a565b6116fb611a32565b611703611a2a565b61170b611a42565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b16919092161790556117669087611011565b506117917f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e488611011565b506117bc7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb88611011565b506117e77f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87611011565b506118127f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a88611011565b508315610e835784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610e7a565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166107fe576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016113e2565b60006119126001600160a01b03841683611a52565b905080516000141580156119375750808060200190518101906119359190612410565b155b15610713576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016113e2565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610f75576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119dd82611a67565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611a22576107138282611b0f565b6107fe611b85565b610f75611bbd565b611a3a611bbd565b610f75611c24565b611a4a611bbd565b610f75611c2c565b6060611a6083836000611c7d565b9392505050565b806001600160a01b03163b600003611ab6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016113e2565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611b2c9190612432565b600060405180830381855af49150503d8060008114611b67576040519150601f19603f3d011682016040523d82523d6000602084013e611b6c565b606091505b5091509150611b7c858383611d33565b95945050505050565b3415610f75576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610f75576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610feb611bbd565b611c34611bbd565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606081471015611cbb576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016113e2565b600080856001600160a01b03168486604051611cd79190612432565b60006040518083038185875af1925050503d8060008114611d14576040519150601f19603f3d011682016040523d82523d6000602084013e611d19565b606091505b5091509150611d29868383611d33565b9695505050505050565b606082611d4857611d4382611da8565b611a60565b8151158015611d5f57506001600160a01b0384163b155b15611da1576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016113e2565b5080611a60565b805115611db85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611dfc57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611a6057600080fd5b80356001600160a01b0381168114611e4357600080fd5b919050565b600080600060608486031215611e5d57600080fd5b611e6684611e2c565b95602085013595506040909401359392505050565b600060208284031215611e8d57600080fd5b5035919050565b60008060408385031215611ea757600080fd5b82359150611eb760208401611e2c565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611f0257600080fd5b611f0b83611e2c565b9150602083013567ffffffffffffffff811115611f2757600080fd5b8301601f81018513611f3857600080fd5b803567ffffffffffffffff811115611f5257611f52611ec0565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715611fbe57611fbe611ec0565b604052818152828201602001871015611fd657600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008083601f84011261200857600080fd5b50813567ffffffffffffffff81111561202057600080fd5b60208301915083602082850101111561203857600080fd5b9250929050565b60008060008060006080868803121561205757600080fd5b61206086611e2c565b945060208601359350604086013567ffffffffffffffff81111561208357600080fd5b61208f88828901611ff6565b96999598509660600135949350505050565b60008060008060008060a087890312156120ba57600080fd5b6120c387611e2c565b955060208701359450604087013567ffffffffffffffff8111156120e657600080fd5b6120f289828a01611ff6565b90955093505060608701359150608087013567ffffffffffffffff81111561211957600080fd5b87016080818a03121561212b57600080fd5b809150509295509295509295565b60006020828403121561214b57600080fd5b611a6082611e2c565b60005b8381101561216f578181015183820152602001612157565b50506000910152565b6020815260008251806020840152612197816040850160208701612154565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080600080608085870312156121df57600080fd5b6121e885611e2c565b93506121f660208601611e2c565b925061220460408601611e2c565b915061221260608601611e2c565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061229e60808301848661221d565b979650505050505050565b838152604060208201526000611b7c60408301848661221d565b6001600160a01b036122d482611e2c565b1682526001600160a01b036122eb60208301611e2c565b1660208301526040818101359083015260006060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261233357600080fd5b820160208101903567ffffffffffffffff81111561235057600080fd5b80360382131561235f57600080fd5b60806060860152611b7c60808601828461221d565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006123ac60a08301858761221d565b82810360808401526123be81856122c3565b9998505050505050505050565b8481526060602082015260006123e560608301858761221d565b828103604084015261229e81856122c3565b60006020828403121561240957600080fd5b5051919050565b60006020828403121561242257600080fd5b81518015158114611a6057600080fd5b60008251612444818460208701612154565b919091019291505056fea26469706673582212204ec109dc2211b9bb584bcf097d6201f1b7f8e8c32266e62be879ded339e643b164736f6c634300081a0033"; + "0x60a060405230608052348015601357600080fd5b5060805161248e61003d60003960008181611227015281816112500152611426015261248e6000f3fe6080604052600436106101965760003560e01c80636f8728ad116100e1578063950837aa1161008a578063ad3cb1cc11610064578063ad3cb1cc146104f2578063d547741f14610548578063e63ab1e914610568578063f8c8765e1461059c57600080fd5b8063950837aa14610489578063a217fddf146104a9578063a783c789146104be57600080fd5b80638456cb59116100bb5780638456cb59146103db57806385f438c1146103f057806391d148541461042457600080fd5b80636f8728ad1461037b5780636fb9a7af1461039b578063743e0c9b146103bb57600080fd5b806336568abe1161014357806352d1902d1161011d57806352d1902d1461030f5780635b112591146103245780635c975abb1461034457600080fd5b806336568abe146102c75780633f4ba83a146102e75780634f1ef286146102fc57600080fd5b806321e093b11161017457806321e093b11461022a578063248a9ca31461024a5780632f2ff15d146102a757600080fd5b806301ffc9a71461019b578063106e6290146101d0578063116191b6146101f2575b600080fd5b3480156101a757600080fd5b506101bb6101b6366004611db4565b6105bc565b60405190151581526020015b60405180910390f35b3480156101dc57600080fd5b506101f06101eb366004611e12565b610655565b005b3480156101fe57600080fd5b50600054610212906001600160a01b031681565b6040516001600160a01b0390911681526020016101c7565b34801561023657600080fd5b50600154610212906001600160a01b031681565b34801561025657600080fd5b50610299610265366004611e45565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101c7565b3480156102b357600080fd5b506101f06102c2366004611e5e565b610718565b3480156102d357600080fd5b506101f06102e2366004611e5e565b610762565b3480156102f357600080fd5b506101f06107ae565b6101f061030a366004611eb9565b6107e3565b34801561031b57600080fd5b50610299610802565b34801561033057600080fd5b50600254610212906001600160a01b031681565b34801561035057600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101bb565b34801561038757600080fd5b506101f0610396366004612009565b610831565b3480156103a757600080fd5b506101f06103b63660046120a1565b61098a565b3480156103c757600080fd5b506101f06103d6366004611e45565b610aa8565b3480156103e757600080fd5b506101f0610ac8565b3480156103fc57600080fd5b506102997f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561043057600080fd5b506101bb61043f366004611e5e565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561049557600080fd5b506101f06104a4366004612120565b610afa565b3480156104b557600080fd5b50610299600081565b3480156104ca57600080fd5b506102997f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b3480156104fe57600080fd5b5061053b6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101c7919061215f565b34801561055457600080fd5b506101f0610563366004611e5e565b610c8d565b34801561057457600080fd5b506102997f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105a857600080fd5b506101f06105b73660046121b0565b610cd1565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061064f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b61065d610e58565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461068781610ed9565b61068f610ee3565b6001546106a6906001600160a01b03168585610f41565b836001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5846040516106e191815260200190565b60405180910390a25061071360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461075281610ed9565b61075c8383610fdb565b50505050565b6001600160a01b03811633146107a4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61071382826110c8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107d881610ed9565b6107e061118c565b50565b6107eb61121c565b6107f4826112ec565b6107fe82826112f7565b5050565b600061080c61141b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610839610e58565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e461086381610ed9565b61086b610ee3565b600054600154610888916001600160a01b03918216911688610f41565b6000546001546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263aa0c0fc1926108df929116908b908b908b908b908a906004016122fe565b600060405180830381600087803b1580156108f957600080fd5b505af115801561090d573d6000803e3d6000fd5b50505050866001600160a01b03167f5272d2fee39bff41b2e763562526315906046373ce08a7bacf76c3080d731ff0878787866040516109509493929190612355565b60405180910390a25061098260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b610992610e58565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109bc81610ed9565b6109c4610ee3565b6000546001546109e1916001600160a01b03918216911687610f41565b6000546001546040517f7bbe9afa0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692637bbe9afa92610a39928c92909116908b908b908b908b9060040161238c565b600060405180830381600087803b158015610a5357600080fd5b505af1158015610a67573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d868686604051610950939291906123e7565b610ab0610ee3565b6001546107e0906001600160a01b031633308461147d565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610af281610ed9565b6107e06114b6565b6000610b0581610ed9565b6001600160a01b038216610b45576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610b7c907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166110c8565b50600254610bb4907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166110c8565b50610bdf7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e483610fdb565b50610c0a7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb83610fdb565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610cc781610ed9565b61075c83836110c8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610d1c5750825b905060008267ffffffffffffffff166001148015610d395750303b155b905081158015610d47575080155b15610d7e576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610ddf5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610deb8989898961152f565b8315610e4d5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01610ed3576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6107e0813361183a565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610f3f576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6040516001600160a01b0383811660248301526044820183905261071391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506118c7565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166110be576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556110743390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061064f565b600091505061064f565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156110be576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061064f565b611194611943565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806112b557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166112a97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b15610f3f576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006107fe81610ed9565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561136f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261136c91810190612401565b60015b6113b5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611411576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016113ac565b610713838361199e565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f3f576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516001600160a01b03848116602483015283811660448301526064820183905261075c9186918216906323b872dd90608401610f6e565b6114be610ee3565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336111fe565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff1660008115801561157a5750825b905060008267ffffffffffffffff1660011480156115975750303b155b9050811580156115a5575080155b156115dc576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561163d5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061165a57506001600160a01b038816155b8061166c57506001600160a01b038716155b8061167e57506001600160a01b038616155b156116b5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116bd6119f4565b6116c56119fc565b6116cd6119f4565b6116d5611a0c565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b16919092161790556117309087610fdb565b5061175b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e488610fdb565b506117867f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb88610fdb565b506117b17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a87610fdb565b506117dc7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a88610fdb565b508315610e4d5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610e44565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166107fe576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016113ac565b60006118dc6001600160a01b03841683611a1c565b905080516000141580156119015750808060200190518101906118ff919061241a565b155b15610713576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024016113ac565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610f3f576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119a782611a31565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156119ec576107138282611ad9565b6107fe611b4f565b610f3f611b87565b611a04611b87565b610f3f611bee565b611a14611b87565b610f3f611bf6565b6060611a2a83836000611c47565b9392505050565b806001600160a01b03163b600003611a80576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016113ac565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611af6919061243c565b600060405180830381855af49150503d8060008114611b31576040519150601f19603f3d011682016040523d82523d6000602084013e611b36565b606091505b5091509150611b46858383611cfd565b95945050505050565b3415610f3f576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610f3f576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fb5611b87565b611bfe611b87565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606081471015611c85576040517fcd7860590000000000000000000000000000000000000000000000000000000081523060048201526024016113ac565b600080856001600160a01b03168486604051611ca1919061243c565b60006040518083038185875af1925050503d8060008114611cde576040519150601f19603f3d011682016040523d82523d6000602084013e611ce3565b606091505b5091509150611cf3868383611cfd565b9695505050505050565b606082611d1257611d0d82611d72565b611a2a565b8151158015611d2957506001600160a01b0384163b155b15611d6b576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016113ac565b5080611a2a565b805115611d825780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611dc657600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611a2a57600080fd5b80356001600160a01b0381168114611e0d57600080fd5b919050565b600080600060608486031215611e2757600080fd5b611e3084611df6565b95602085013595506040909401359392505050565b600060208284031215611e5757600080fd5b5035919050565b60008060408385031215611e7157600080fd5b82359150611e8160208401611df6565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611ecc57600080fd5b611ed583611df6565b9150602083013567ffffffffffffffff811115611ef157600080fd5b8301601f81018513611f0257600080fd5b803567ffffffffffffffff811115611f1c57611f1c611e8a565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715611f8857611f88611e8a565b604052818152828201602001871015611fa057600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008083601f840112611fd257600080fd5b50813567ffffffffffffffff811115611fea57600080fd5b60208301915083602082850101111561200257600080fd5b9250929050565b60008060008060008060a0878903121561202257600080fd5b61202b87611df6565b955060208701359450604087013567ffffffffffffffff81111561204e57600080fd5b61205a89828a01611fc0565b90955093505060608701359150608087013567ffffffffffffffff81111561208157600080fd5b87016080818a03121561209357600080fd5b809150509295509295509295565b60008060008060008086880360a08112156120bb57600080fd5b60208112156120c957600080fd5b508695506120d960208801611df6565b945060408701359350606087013567ffffffffffffffff8111156120fc57600080fd5b61210889828a01611fc0565b979a9699509497949695608090950135949350505050565b60006020828403121561213257600080fd5b611a2a82611df6565b60005b8381101561215657818101518382015260200161213e565b50506000910152565b602081526000825180602084015261217e81604085016020870161213b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b600080600080608085870312156121c657600080fd5b6121cf85611df6565b93506121dd60208601611df6565b92506121eb60408601611df6565b91506121f960608601611df6565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b0361225e82611df6565b1682526001600160a01b0361227560208301611df6565b1660208301526040818101359083015260006060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126122bd57600080fd5b820160208101903567ffffffffffffffff8111156122da57600080fd5b8036038213156122e957600080fd5b60806060860152611b46608086018284612204565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061233660a083018587612204565b8281036080840152612348818561224d565b9998505050505050505050565b84815260606020820152600061236f606083018587612204565b8281036040840152612381818561224d565b979650505050505050565b6001600160a01b0361239d88611df6565b1681526001600160a01b03861660208201526001600160a01b038516604082015283606082015260a0608082015260006123db60a083018486612204565b98975050505050505050565b838152604060208201526000611b46604083018486612204565b60006020828403121561241357600080fd5b5051919050565b60006020828403121561242c57600080fd5b81518015158114611a2a57600080fd5b6000825161244e81846020870161213b565b919091019291505056fea2646970667358221220bdc5a55fc0068a2b168bde263209717fe01ad50ad630dffa604561626eca9bb164736f6c634300081a0033"; type ZetaConnectorNativeConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/ZetaConnectorNonNativeUpgradeTest__factory.ts b/v2/types/factories/ZetaConnectorNonNativeUpgradeTest__factory.ts index e8f05c94..326b7c5e 100644 --- a/v2/types/factories/ZetaConnectorNonNativeUpgradeTest__factory.ts +++ b/v2/types/factories/ZetaConnectorNonNativeUpgradeTest__factory.ts @@ -387,6 +387,18 @@ const _abi = [ type: "function", name: "withdrawAndCall", inputs: [ + { + name: "messageContext", + type: "tuple", + internalType: "struct MessageContext", + components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, + ], + }, { name: "to", type: "address", @@ -861,7 +873,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a060405230608052348015601357600080fd5b5060805161251961003d6000396000818161145701528181611480015261165601526125196000f3fe6080604052600436106101ac5760003560e01c80636f8728ad116100ec578063a217fddf1161008a578063d547741f11610064578063d547741f1461057e578063d5abeb011461059e578063e63ab1e9146105b4578063f8c8765e146105e857600080fd5b8063a217fddf146104df578063a783c789146104f4578063ad3cb1cc1461052857600080fd5b80638456cb59116100c65780638456cb591461041157806385f438c11461042657806391d148541461045a578063950837aa146104bf57600080fd5b80636f8728ad146103b15780636f8b44b0146103d1578063743e0c9b146103f157600080fd5b806336568abe1161015957806352d1902d1161013357806352d1902d146103255780635b1125911461033a5780635c975abb1461035a5780635e3e9fef1461039157600080fd5b806336568abe146102dd5780633f4ba83a146102fd5780634f1ef2861461031257600080fd5b806321e093b11161018a57806321e093b114610240578063248a9ca3146102605780632f2ff15d146102bd57600080fd5b806301ffc9a7146101b1578063106e6290146101e6578063116191b614610208575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004611e67565b610608565b60405190151581526020015b60405180910390f35b3480156101f257600080fd5b50610206610201366004611ec5565b6106a1565b005b34801561021457600080fd5b50600054610228906001600160a01b031681565b6040516001600160a01b0390911681526020016101dd565b34801561024c57600080fd5b50600154610228906001600160a01b031681565b34801561026c57600080fd5b506102af61027b366004611ef8565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101dd565b3480156102c957600080fd5b506102066102d8366004611f11565b610758565b3480156102e957600080fd5b506102066102f8366004611f11565b6107a2565b34801561030957600080fd5b506102066107ee565b610206610320366004611f6c565b610823565b34801561033157600080fd5b506102af610842565b34801561034657600080fd5b50600254610228906001600160a01b031681565b34801561036657600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101d1565b34801561039d57600080fd5b506102066103ac3660046120bc565b610871565b3480156103bd57600080fd5b506102066103cc36600461211e565b6109bf565b3480156103dd57600080fd5b506102066103ec366004611ef8565b610b12565b3480156103fd57600080fd5b5061020661040c366004611ef8565b610b80565b34801561041d57600080fd5b50610206610c01565b34801561043257600080fd5b506102af7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561046657600080fd5b506101d1610475366004611f11565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104cb57600080fd5b506102066104da3660046121b6565b610c33565b3480156104eb57600080fd5b506102af600081565b34801561050057600080fd5b506102af7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561053457600080fd5b506105716040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101dd91906121f5565b34801561058a57600080fd5b50610206610599366004611f11565b610dc6565b3480156105aa57600080fd5b506102af60035481565b3480156105c057600080fd5b506102af7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105f457600080fd5b50610206610603366004612246565b610e0a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061069b57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6106a9610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106d381611036565b6106db611040565b6106e684848461109e565b836001600160a01b03167f3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee98460405161072191815260200190565b60405180910390a25061075360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461079281611036565b61079c838361120b565b50505050565b6001600160a01b03811633146107e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61075382826112f8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61081881611036565b6108206113bc565b50565b61082b61144c565b6108348261151c565b61083e8282611527565b5050565b600061084c61164b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610879610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46108a381611036565b6108ab611040565b6000546108c2906001600160a01b0316868461109e565b6000546001546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692635131ab5992610917929116908a908a908a908a906004016122e3565b600060405180830381600087803b15801561093157600080fd5b505af1158015610945573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d86868660405161098693929190612326565b60405180910390a2506109b860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6109c7610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109f181611036565b6109f9611040565b600054610a10906001600160a01b0316878561109e565b6000546001546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263aa0c0fc192610a67929116908b908b908b908b908a906004016123f1565b600060405180830381600087803b158015610a8157600080fd5b505af1158015610a95573d6000803e3d6000fd5b50505050866001600160a01b03167f5272d2fee39bff41b2e763562526315906046373ce08a7bacf76c3080d731ff087878786604051610ad89493929190612448565b60405180910390a250610b0a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b3c81611036565b610b44611040565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610b88611040565b6001546040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018390526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610bed57600080fd5b505af11580156109b8573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c2b81611036565b6108206116ad565b6000610c3e81611036565b6001600160a01b038216610c7e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610cb5907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166112f8565b50600254610ced907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166112f8565b50610d187f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361120b565b50610d437f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361120b565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610e0081611036565b61079c83836112f8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e555750825b905060008267ffffffffffffffff166001148015610e725750303b155b905081158015610e80575080155b15610eb7576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610f185784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610f2489898989611726565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6003558315610faa5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611030576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6108208133611a31565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561109c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600354600160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111189190612474565b611122908461248d565b111561115a576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f1e458bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018590526044820184905290911690631e458bee90606401600060405180830381600087803b1580156111c857600080fd5b505af11580156111dc573d6000803e3d6000fd5b50505050505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166112ee576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112a43390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061069b565b600091505061069b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156112ee576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061069b565b6113c4611abe565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806114e557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114d97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561109c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061083e81611036565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561159f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261159c91810190612474565b60015b6115e5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611641576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016115dc565b6107538383611b19565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461109c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116b5611040565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361142e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117715750825b905060008267ffffffffffffffff16600114801561178e5750303b155b90508115801561179c575080155b156117d3576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118345784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061185157506001600160a01b038816155b8061186357506001600160a01b038716155b8061187557506001600160a01b038616155b156118ac576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118b4611b6f565b6118bc611b77565b6118c4611b6f565b6118cc611b87565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b1691909216179055611927908761120b565b506119527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48861120b565b5061197d7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8861120b565b506119a87f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8761120b565b506119d37f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8861120b565b508315610faa5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610fa1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff1661083e576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016115dc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661109c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b2282611b97565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611b67576107538282611c3f565b61083e611cb5565b61109c611ced565b611b7f611ced565b61109c611d54565b611b8f611ced565b61109c611d5c565b806001600160a01b03163b600003611be6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016115dc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611c5c91906124c7565b600060405180830381855af49150503d8060008114611c97576040519150601f19603f3d011682016040523d82523d6000602084013e611c9c565b606091505b5091509150611cac858383611dad565b95945050505050565b341561109c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661109c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111e5611ced565b611d64611ced565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606082611dc257611dbd82611e25565b611e1e565b8151158015611dd957506001600160a01b0384163b155b15611e1b576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016115dc565b50805b9392505050565b805115611e355780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611e7957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611e1e57600080fd5b80356001600160a01b0381168114611ec057600080fd5b919050565b600080600060608486031215611eda57600080fd5b611ee384611ea9565b95602085013595506040909401359392505050565b600060208284031215611f0a57600080fd5b5035919050565b60008060408385031215611f2457600080fd5b82359150611f3460208401611ea9565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611f7f57600080fd5b611f8883611ea9565b9150602083013567ffffffffffffffff811115611fa457600080fd5b8301601f81018513611fb557600080fd5b803567ffffffffffffffff811115611fcf57611fcf611f3d565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561203b5761203b611f3d565b60405281815282820160200187101561205357600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008083601f84011261208557600080fd5b50813567ffffffffffffffff81111561209d57600080fd5b6020830191508360208285010111156120b557600080fd5b9250929050565b6000806000806000608086880312156120d457600080fd5b6120dd86611ea9565b945060208601359350604086013567ffffffffffffffff81111561210057600080fd5b61210c88828901612073565b96999598509660600135949350505050565b60008060008060008060a0878903121561213757600080fd5b61214087611ea9565b955060208701359450604087013567ffffffffffffffff81111561216357600080fd5b61216f89828a01612073565b90955093505060608701359150608087013567ffffffffffffffff81111561219657600080fd5b87016080818a0312156121a857600080fd5b809150509295509295509295565b6000602082840312156121c857600080fd5b611e1e82611ea9565b60005b838110156121ec5781810151838201526020016121d4565b50506000910152565b60208152600082518060208401526122148160408501602087016121d1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561225c57600080fd5b61226585611ea9565b935061227360208601611ea9565b925061228160408601611ea9565b915061228f60608601611ea9565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061231b60808301848661229a565b979650505050505050565b838152604060208201526000611cac60408301848661229a565b6001600160a01b0361235182611ea9565b1682526001600160a01b0361236860208301611ea9565b1660208301526040818101359083015260006060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126123b057600080fd5b820160208101903567ffffffffffffffff8111156123cd57600080fd5b8036038213156123dc57600080fd5b60806060860152611cac60808601828461229a565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061242960a08301858761229a565b828103608084015261243b8185612340565b9998505050505050505050565b84815260606020820152600061246260608301858761229a565b828103604084015261231b8185612340565b60006020828403121561248657600080fd5b5051919050565b8082018082111561069b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082516124d98184602087016121d1565b919091019291505056fea2646970667358221220eba4c2f5dade5ff34217048d440008758a00a1202245b68fa99aa106f7b708de64736f6c634300081a0033"; + "0x60a060405230608052348015601357600080fd5b5060805161252a61003d60003960008181611428015281816114510152611627015261252a6000f3fe6080604052600436106101ac5760003560e01c80636f8b44b0116100ec578063a217fddf1161008a578063d547741f11610064578063d547741f1461057e578063d5abeb011461059e578063e63ab1e9146105b4578063f8c8765e146105e857600080fd5b8063a217fddf146104df578063a783c789146104f4578063ad3cb1cc1461052857600080fd5b80638456cb59116100c65780638456cb591461041157806385f438c11461042657806391d148541461045a578063950837aa146104bf57600080fd5b80636f8b44b0146103b15780636fb9a7af146103d1578063743e0c9b146103f157600080fd5b806336568abe1161015957806352d1902d1161013357806352d1902d146103255780635b1125911461033a5780635c975abb1461035a5780636f8728ad1461039157600080fd5b806336568abe146102dd5780633f4ba83a146102fd5780634f1ef2861461031257600080fd5b806321e093b11161018a57806321e093b114610240578063248a9ca3146102605780632f2ff15d146102bd57600080fd5b806301ffc9a7146101b1578063106e6290146101e6578063116191b614610208575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004611e38565b610608565b60405190151581526020015b60405180910390f35b3480156101f257600080fd5b50610206610201366004611e96565b6106a1565b005b34801561021457600080fd5b50600054610228906001600160a01b031681565b6040516001600160a01b0390911681526020016101dd565b34801561024c57600080fd5b50600154610228906001600160a01b031681565b34801561026c57600080fd5b506102af61027b366004611ec9565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101dd565b3480156102c957600080fd5b506102066102d8366004611ee2565b610758565b3480156102e957600080fd5b506102066102f8366004611ee2565b6107a2565b34801561030957600080fd5b506102066107ee565b610206610320366004611f3d565b610823565b34801561033157600080fd5b506102af610842565b34801561034657600080fd5b50600254610228906001600160a01b031681565b34801561036657600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101d1565b34801561039d57600080fd5b506102066103ac36600461208d565b610871565b3480156103bd57600080fd5b506102066103cc366004611ec9565b6109c4565b3480156103dd57600080fd5b506102066103ec366004612125565b610a32565b3480156103fd57600080fd5b5061020661040c366004611ec9565b610b4a565b34801561041d57600080fd5b50610206610bd2565b34801561043257600080fd5b506102af7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561046657600080fd5b506101d1610475366004611ee2565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104cb57600080fd5b506102066104da3660046121a4565b610c04565b3480156104eb57600080fd5b506102af600081565b34801561050057600080fd5b506102af7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561053457600080fd5b506105716040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101dd91906121e3565b34801561058a57600080fd5b50610206610599366004611ee2565b610d97565b3480156105aa57600080fd5b506102af60035481565b3480156105c057600080fd5b506102af7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105f457600080fd5b50610206610603366004612234565b610ddb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061069b57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6106a9610f86565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106d381611007565b6106db611011565b6106e684848461106f565b836001600160a01b03167f3e35ef4326151011878c9e8e968a0f3913fe98ca68f72a1e0c2e9be13ffb3ee98460405161072191815260200190565b60405180910390a25061075360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461079281611007565b61079c83836111dc565b50505050565b6001600160a01b03811633146107e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61075382826112c9565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61081881611007565b61082061138d565b50565b61082b61141d565b610834826114ed565b61083e82826114f8565b5050565b600061084c61161c565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610879610f86565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46108a381611007565b6108ab611011565b6000546108c2906001600160a01b0316878561106f565b6000546001546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263aa0c0fc192610919929116908b908b908b908b908a90600401612382565b600060405180830381600087803b15801561093357600080fd5b505af1158015610947573d6000803e3d6000fd5b50505050866001600160a01b03167f5272d2fee39bff41b2e763562526315906046373ce08a7bacf76c3080d731ff08787878660405161098a94939291906123d9565b60405180910390a2506109bc60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109ee81611007565b6109f6611011565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610a3a610f86565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a6481611007565b610a6c611011565b600054610a83906001600160a01b0316868461106f565b6000546001546040517f7bbe9afa0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692637bbe9afa92610adb928c92909116908b908b908b908b90600401612410565b600060405180830381600087803b158015610af557600080fd5b505af1158015610b09573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d86868660405161098a9392919061246b565b610b52611011565b6001546040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018390526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610bb757600080fd5b505af1158015610bcb573d6000803e3d6000fd5b5050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610bfc81611007565b61082061167e565b6000610c0f81611007565b6001600160a01b038216610c4f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610c86907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166112c9565b50600254610cbe907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166112c9565b50610ce97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836111dc565b50610d147f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb836111dc565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610dd181611007565b61079c83836112c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e265750825b905060008267ffffffffffffffff166001148015610e435750303b155b905081158015610e51575080155b15610e88576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610ee95784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610ef5898989896116f7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6003558315610f7b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611001576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6108208133611a02565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561106d576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600354600160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e99190612485565b6110f3908461249e565b111561112b576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f1e458bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018590526044820184905290911690631e458bee90606401600060405180830381600087803b15801561119957600080fd5b505af11580156111ad573d6000803e3d6000fd5b50505050505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166112bf576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112753390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061069b565b600091505061069b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156112bf576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061069b565b611395611a8f565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806114b657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114aa7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561106d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061083e81611007565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611570575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261156d91810190612485565b60015b6115b6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611612576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016115ad565b6107538383611aea565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461106d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611686611011565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336113ff565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117425750825b905060008267ffffffffffffffff16600114801561175f5750303b155b90508115801561176d575080155b156117a4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118055784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061182257506001600160a01b038816155b8061183457506001600160a01b038716155b8061184657506001600160a01b038616155b1561187d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611885611b40565b61188d611b48565b611895611b40565b61189d611b58565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b16919092161790556118f890876111dc565b506119237f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4886111dc565b5061194e7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb886111dc565b506119797f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876111dc565b506119a47f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a886111dc565b508315610f7b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610f72565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff1661083e576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016115ad565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661106d576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611af382611b68565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611b38576107538282611c10565b61083e611c86565b61106d611cbe565b611b50611cbe565b61106d611d25565b611b60611cbe565b61106d611d2d565b806001600160a01b03163b600003611bb7576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016115ad565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611c2d91906124d8565b600060405180830381855af49150503d8060008114611c68576040519150601f19603f3d011682016040523d82523d6000602084013e611c6d565b606091505b5091509150611c7d858383611d7e565b95945050505050565b341561106d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661106d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111b6611cbe565b611d35611cbe565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606082611d9357611d8e82611df6565b611def565b8151158015611daa57506001600160a01b0384163b155b15611dec576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016115ad565b50805b9392505050565b805115611e065780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611e4a57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611def57600080fd5b80356001600160a01b0381168114611e9157600080fd5b919050565b600080600060608486031215611eab57600080fd5b611eb484611e7a565b95602085013595506040909401359392505050565b600060208284031215611edb57600080fd5b5035919050565b60008060408385031215611ef557600080fd5b82359150611f0560208401611e7a565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611f5057600080fd5b611f5983611e7a565b9150602083013567ffffffffffffffff811115611f7557600080fd5b8301601f81018513611f8657600080fd5b803567ffffffffffffffff811115611fa057611fa0611f0e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561200c5761200c611f0e565b60405281815282820160200187101561202457600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008083601f84011261205657600080fd5b50813567ffffffffffffffff81111561206e57600080fd5b60208301915083602082850101111561208657600080fd5b9250929050565b60008060008060008060a087890312156120a657600080fd5b6120af87611e7a565b955060208701359450604087013567ffffffffffffffff8111156120d257600080fd5b6120de89828a01612044565b90955093505060608701359150608087013567ffffffffffffffff81111561210557600080fd5b87016080818a03121561211757600080fd5b809150509295509295509295565b60008060008060008086880360a081121561213f57600080fd5b602081121561214d57600080fd5b5086955061215d60208801611e7a565b945060408701359350606087013567ffffffffffffffff81111561218057600080fd5b61218c89828a01612044565b979a9699509497949695608090950135949350505050565b6000602082840312156121b657600080fd5b611def82611e7a565b60005b838110156121da5781810151838201526020016121c2565b50506000910152565b60208152600082518060208401526122028160408501602087016121bf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561224a57600080fd5b61225385611e7a565b935061226160208601611e7a565b925061226f60408601611e7a565b915061227d60608601611e7a565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b036122e282611e7a565b1682526001600160a01b036122f960208301611e7a565b1660208301526040818101359083015260006060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261234157600080fd5b820160208101903567ffffffffffffffff81111561235e57600080fd5b80360382131561236d57600080fd5b60806060860152611c7d608086018284612288565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006123ba60a083018587612288565b82810360808401526123cc81856122d1565b9998505050505050505050565b8481526060602082015260006123f3606083018587612288565b828103604084015261240581856122d1565b979650505050505050565b6001600160a01b0361242188611e7a565b1681526001600160a01b03861660208201526001600160a01b038516604082015283606082015260a06080820152600061245f60a083018486612288565b98975050505050505050565b838152604060208201526000611c7d604083018486612288565b60006020828403121561249757600080fd5b5051919050565b8082018082111561069b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082516124ea8184602087016121bf565b919091019291505056fea264697066735822122012f1cc9a69df210b47cc212447c9dd80eb15b7167b397eab0c291e9f0f483d2564736f6c634300081a0033"; type ZetaConnectorNonNativeUpgradeTestConstructorParams = | [signer?: Signer] diff --git a/v2/types/factories/ZetaConnectorNonNative__factory.ts b/v2/types/factories/ZetaConnectorNonNative__factory.ts index c3e4f1f3..b7adc88d 100644 --- a/v2/types/factories/ZetaConnectorNonNative__factory.ts +++ b/v2/types/factories/ZetaConnectorNonNative__factory.ts @@ -387,6 +387,18 @@ const _abi = [ type: "function", name: "withdrawAndCall", inputs: [ + { + name: "messageContext", + type: "tuple", + internalType: "struct MessageContext", + components: [ + { + name: "sender", + type: "address", + internalType: "address", + }, + ], + }, { name: "to", type: "address", @@ -842,7 +854,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60a060405230608052348015601357600080fd5b5060805161251961003d6000396000818161145701528181611480015261165601526125196000f3fe6080604052600436106101ac5760003560e01c80636f8728ad116100ec578063a217fddf1161008a578063d547741f11610064578063d547741f1461057e578063d5abeb011461059e578063e63ab1e9146105b4578063f8c8765e146105e857600080fd5b8063a217fddf146104df578063a783c789146104f4578063ad3cb1cc1461052857600080fd5b80638456cb59116100c65780638456cb591461041157806385f438c11461042657806391d148541461045a578063950837aa146104bf57600080fd5b80636f8728ad146103b15780636f8b44b0146103d1578063743e0c9b146103f157600080fd5b806336568abe1161015957806352d1902d1161013357806352d1902d146103255780635b1125911461033a5780635c975abb1461035a5780635e3e9fef1461039157600080fd5b806336568abe146102dd5780633f4ba83a146102fd5780634f1ef2861461031257600080fd5b806321e093b11161018a57806321e093b114610240578063248a9ca3146102605780632f2ff15d146102bd57600080fd5b806301ffc9a7146101b1578063106e6290146101e6578063116191b614610208575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004611e67565b610608565b60405190151581526020015b60405180910390f35b3480156101f257600080fd5b50610206610201366004611ec5565b6106a1565b005b34801561021457600080fd5b50600054610228906001600160a01b031681565b6040516001600160a01b0390911681526020016101dd565b34801561024c57600080fd5b50600154610228906001600160a01b031681565b34801561026c57600080fd5b506102af61027b366004611ef8565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101dd565b3480156102c957600080fd5b506102066102d8366004611f11565b610758565b3480156102e957600080fd5b506102066102f8366004611f11565b6107a2565b34801561030957600080fd5b506102066107ee565b610206610320366004611f6c565b610823565b34801561033157600080fd5b506102af610842565b34801561034657600080fd5b50600254610228906001600160a01b031681565b34801561036657600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101d1565b34801561039d57600080fd5b506102066103ac3660046120bc565b610871565b3480156103bd57600080fd5b506102066103cc36600461211e565b6109bf565b3480156103dd57600080fd5b506102066103ec366004611ef8565b610b12565b3480156103fd57600080fd5b5061020661040c366004611ef8565b610b80565b34801561041d57600080fd5b50610206610c01565b34801561043257600080fd5b506102af7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561046657600080fd5b506101d1610475366004611f11565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104cb57600080fd5b506102066104da3660046121b6565b610c33565b3480156104eb57600080fd5b506102af600081565b34801561050057600080fd5b506102af7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561053457600080fd5b506105716040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101dd91906121f5565b34801561058a57600080fd5b50610206610599366004611f11565b610dc6565b3480156105aa57600080fd5b506102af60035481565b3480156105c057600080fd5b506102af7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105f457600080fd5b50610206610603366004612246565b610e0a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061069b57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6106a9610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106d381611036565b6106db611040565b6106e684848461109e565b836001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161072191815260200190565b60405180910390a25061075360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461079281611036565b61079c838361120b565b50505050565b6001600160a01b03811633146107e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61075382826112f8565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61081881611036565b6108206113bc565b50565b61082b61144c565b6108348261151c565b61083e8282611527565b5050565b600061084c61164b565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610879610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46108a381611036565b6108ab611040565b6000546108c2906001600160a01b0316868461109e565b6000546001546040517f5131ab590000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692635131ab5992610917929116908a908a908a908a906004016122e3565b600060405180830381600087803b15801561093157600080fd5b505af1158015610945573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d86868660405161098693929190612326565b60405180910390a2506109b860017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050505050565b6109c7610fb5565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46109f181611036565b6109f9611040565b600054610a10906001600160a01b0316878561109e565b6000546001546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263aa0c0fc192610a67929116908b908b908b908b908a906004016123f1565b600060405180830381600087803b158015610a8157600080fd5b505af1158015610a95573d6000803e3d6000fd5b50505050866001600160a01b03167f5272d2fee39bff41b2e763562526315906046373ce08a7bacf76c3080d731ff087878786604051610ad89493929190612448565b60405180910390a250610b0a60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb610b3c81611036565b610b44611040565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610b88611040565b6001546040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018390526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610bed57600080fd5b505af11580156109b8573d6000803e3d6000fd5b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610c2b81611036565b6108206116ad565b6000610c3e81611036565b6001600160a01b038216610c7e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610cb5907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166112f8565b50600254610ced907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166112f8565b50610d187f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48361120b565b50610d437f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8361120b565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610e0081611036565b61079c83836112f8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e555750825b905060008267ffffffffffffffff166001148015610e725750303b155b905081158015610e80575080155b15610eb7576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610f185784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610f2489898989611726565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6003558315610faa5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611030576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6108208133611a31565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561109c576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600354600160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111189190612474565b611122908461248d565b111561115a576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f1e458bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018590526044820184905290911690631e458bee90606401600060405180830381600087803b1580156111c857600080fd5b505af11580156111dc573d6000803e3d6000fd5b50505050505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166112ee576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112a43390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061069b565b600091505061069b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156112ee576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061069b565b6113c4611abe565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806114e557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114d97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561109c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061083e81611036565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561159f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261159c91810190612474565b60015b6115e5576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611641576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016115dc565b6107538383611b19565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461109c576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116b5611040565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2583361142e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117715750825b905060008267ffffffffffffffff16600114801561178e5750303b155b90508115801561179c575080155b156117d3576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118345784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061185157506001600160a01b038816155b8061186357506001600160a01b038716155b8061187557506001600160a01b038616155b156118ac576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118b4611b6f565b6118bc611b77565b6118c4611b6f565b6118cc611b87565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b1691909216179055611927908761120b565b506119527f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e48861120b565b5061197d7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb8861120b565b506119a87f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8761120b565b506119d37f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8861120b565b508315610faa5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610fa1565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff1661083e576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016115dc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661109c576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b2282611b97565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611b67576107538282611c3f565b61083e611cb5565b61109c611ced565b611b7f611ced565b61109c611d54565b611b8f611ced565b61109c611d5c565b806001600160a01b03163b600003611be6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016115dc565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611c5c91906124c7565b600060405180830381855af49150503d8060008114611c97576040519150601f19603f3d011682016040523d82523d6000602084013e611c9c565b606091505b5091509150611cac858383611dad565b95945050505050565b341561109c576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661109c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111e5611ced565b611d64611ced565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606082611dc257611dbd82611e25565b611e1e565b8151158015611dd957506001600160a01b0384163b155b15611e1b576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016115dc565b50805b9392505050565b805115611e355780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611e7957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611e1e57600080fd5b80356001600160a01b0381168114611ec057600080fd5b919050565b600080600060608486031215611eda57600080fd5b611ee384611ea9565b95602085013595506040909401359392505050565b600060208284031215611f0a57600080fd5b5035919050565b60008060408385031215611f2457600080fd5b82359150611f3460208401611ea9565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611f7f57600080fd5b611f8883611ea9565b9150602083013567ffffffffffffffff811115611fa457600080fd5b8301601f81018513611fb557600080fd5b803567ffffffffffffffff811115611fcf57611fcf611f3d565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561203b5761203b611f3d565b60405281815282820160200187101561205357600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008083601f84011261208557600080fd5b50813567ffffffffffffffff81111561209d57600080fd5b6020830191508360208285010111156120b557600080fd5b9250929050565b6000806000806000608086880312156120d457600080fd5b6120dd86611ea9565b945060208601359350604086013567ffffffffffffffff81111561210057600080fd5b61210c88828901612073565b96999598509660600135949350505050565b60008060008060008060a0878903121561213757600080fd5b61214087611ea9565b955060208701359450604087013567ffffffffffffffff81111561216357600080fd5b61216f89828a01612073565b90955093505060608701359150608087013567ffffffffffffffff81111561219657600080fd5b87016080818a0312156121a857600080fd5b809150509295509295509295565b6000602082840312156121c857600080fd5b611e1e82611ea9565b60005b838110156121ec5781810151838201526020016121d4565b50506000910152565b60208152600082518060208401526122148160408501602087016121d1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561225c57600080fd5b61226585611ea9565b935061227360208601611ea9565b925061228160408601611ea9565b915061228f60608601611ea9565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b03861681526001600160a01b038516602082015283604082015260806060820152600061231b60808301848661229a565b979650505050505050565b838152604060208201526000611cac60408301848661229a565b6001600160a01b0361235182611ea9565b1682526001600160a01b0361236860208301611ea9565b1660208301526040818101359083015260006060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126123b057600080fd5b820160208101903567ffffffffffffffff8111156123cd57600080fd5b8036038213156123dc57600080fd5b60806060860152611cac60808601828461229a565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a06060820152600061242960a08301858761229a565b828103608084015261243b8185612340565b9998505050505050505050565b84815260606020820152600061246260608301858761229a565b828103604084015261231b8185612340565b60006020828403121561248657600080fd5b5051919050565b8082018082111561069b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082516124d98184602087016121d1565b919091019291505056fea2646970667358221220ecaeeab5029e9c664da04ee2fdaf2e0659e1740805c1791257cff702c4072f4664736f6c634300081a0033"; + "0x60a060405230608052348015601357600080fd5b5060805161252a61003d60003960008181611428015281816114510152611627015261252a6000f3fe6080604052600436106101ac5760003560e01c80636f8b44b0116100ec578063a217fddf1161008a578063d547741f11610064578063d547741f1461057e578063d5abeb011461059e578063e63ab1e9146105b4578063f8c8765e146105e857600080fd5b8063a217fddf146104df578063a783c789146104f4578063ad3cb1cc1461052857600080fd5b80638456cb59116100c65780638456cb591461041157806385f438c11461042657806391d148541461045a578063950837aa146104bf57600080fd5b80636f8b44b0146103b15780636fb9a7af146103d1578063743e0c9b146103f157600080fd5b806336568abe1161015957806352d1902d1161013357806352d1902d146103255780635b1125911461033a5780635c975abb1461035a5780636f8728ad1461039157600080fd5b806336568abe146102dd5780633f4ba83a146102fd5780634f1ef2861461031257600080fd5b806321e093b11161018a57806321e093b114610240578063248a9ca3146102605780632f2ff15d146102bd57600080fd5b806301ffc9a7146101b1578063106e6290146101e6578063116191b614610208575b600080fd5b3480156101bd57600080fd5b506101d16101cc366004611e38565b610608565b60405190151581526020015b60405180910390f35b3480156101f257600080fd5b50610206610201366004611e96565b6106a1565b005b34801561021457600080fd5b50600054610228906001600160a01b031681565b6040516001600160a01b0390911681526020016101dd565b34801561024c57600080fd5b50600154610228906001600160a01b031681565b34801561026c57600080fd5b506102af61027b366004611ec9565b60009081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101dd565b3480156102c957600080fd5b506102066102d8366004611ee2565b610758565b3480156102e957600080fd5b506102066102f8366004611ee2565b6107a2565b34801561030957600080fd5b506102066107ee565b610206610320366004611f3d565b610823565b34801561033157600080fd5b506102af610842565b34801561034657600080fd5b50600254610228906001600160a01b031681565b34801561036657600080fd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101d1565b34801561039d57600080fd5b506102066103ac36600461208d565b610871565b3480156103bd57600080fd5b506102066103cc366004611ec9565b6109c4565b3480156103dd57600080fd5b506102066103ec366004612125565b610a32565b3480156103fd57600080fd5b5061020661040c366004611ec9565b610b4a565b34801561041d57600080fd5b50610206610bd2565b34801561043257600080fd5b506102af7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e481565b34801561046657600080fd5b506101d1610475366004611ee2565b60009182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104cb57600080fd5b506102066104da3660046121a4565b610c04565b3480156104eb57600080fd5b506102af600081565b34801561050057600080fd5b506102af7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb81565b34801561053457600080fd5b506105716040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101dd91906121e3565b34801561058a57600080fd5b50610206610599366004611ee2565b610d97565b3480156105aa57600080fd5b506102af60035481565b3480156105c057600080fd5b506102af7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156105f457600080fd5b50610206610603366004612234565b610ddb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061069b57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6106a9610f86565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46106d381611007565b6106db611011565b6106e684848461106f565b836001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58460405161072191815260200190565b60405180910390a25061075360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461079281611007565b61079c83836111dc565b50505050565b6001600160a01b03811633146107e4576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61075382826112c9565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61081881611007565b61082061138d565b50565b61082b61141d565b610834826114ed565b61083e82826114f8565b5050565b600061084c61161c565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610879610f86565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e46108a381611007565b6108ab611011565b6000546108c2906001600160a01b0316878561106f565b6000546001546040517faa0c0fc10000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263aa0c0fc192610919929116908b908b908b908b908a90600401612382565b600060405180830381600087803b15801561093357600080fd5b505af1158015610947573d6000803e3d6000fd5b50505050866001600160a01b03167f5272d2fee39bff41b2e763562526315906046373ce08a7bacf76c3080d731ff08787878660405161098a94939291906123d9565b60405180910390a2506109bc60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050505050565b7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb6109ee81611007565b6109f6611011565b60038290556040518281527f7810bd47de260c3e9ee10061cf438099dd12256c79485f12f94dbccc981e806c9060200160405180910390a15050565b610a3a610f86565b7f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4610a6481611007565b610a6c611011565b600054610a83906001600160a01b0316868461106f565b6000546001546040517f7bbe9afa0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692637bbe9afa92610adb928c92909116908b908b908b908b90600401612410565b600060405180830381600087803b158015610af557600080fd5b505af1158015610b09573d6000803e3d6000fd5b50505050856001600160a01b03167f23b9573b29ff81f01c7aa1968188e1cb7d5858b08582e111fdaf386d9ef9bd8d86868660405161098a9392919061246b565b610b52611011565b6001546040517f79cc6790000000000000000000000000000000000000000000000000000000008152336004820152602481018390526001600160a01b03909116906379cc679090604401600060405180830381600087803b158015610bb757600080fd5b505af1158015610bcb573d6000803e3d6000fd5b5050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610bfc81611007565b61082061167e565b6000610c0f81611007565b6001600160a01b038216610c4f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254610c86907f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4906001600160a01b03166112c9565b50600254610cbe907f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb906001600160a01b03166112c9565b50610ce97f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4836111dc565b50610d147f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb836111dc565b50600254604080516001600160a01b03928316815291841660208301527f33770ab682353c17917ad3e667f05905fc8dda00671ef1ed33bef9bc8db0323e910160405180910390a150600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610dd181611007565b61079c83836112c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610e265750825b905060008267ffffffffffffffff166001148015610e435750303b155b905081158015610e51575080155b15610e88576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610ee95784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610ef5898989896116f7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6003558315610f7b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611001576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6108208133611a02565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561106d576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600354600160009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e99190612485565b6110f3908461249e565b111561112b576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546040517f1e458bee0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018590526044820184905290911690631e458bee90606401600060405180830381600087803b15801561119957600080fd5b505af11580156111ad573d6000803e3d6000fd5b50505050505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166112bf576000848152602082815260408083206001600160a01b0387168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112753390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061069b565b600091505061069b565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156112bf576000848152602082815260408083206001600160a01b038716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061069b565b611395611a8f565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806114b657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114aa7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b1561106d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061083e81611007565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611570575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261156d91810190612485565b60015b6115b6576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611612576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016115ad565b6107538383611aea565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461106d576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611686611011565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336113ff565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156117425750825b905060008267ffffffffffffffff16600114801561175f5750303b155b90508115801561176d575080155b156117a4576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156118055784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b6001600160a01b038916158061182257506001600160a01b038816155b8061183457506001600160a01b038716155b8061184657506001600160a01b038616155b1561187d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611885611b40565b61188d611b48565b611895611b40565b61189d611b58565b600080546001600160a01b03808c167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316178355600180548c831690841617905560028054918b16919092161790556118f890876111dc565b506119237f10dac8c06a04bec0b551627dad28bc00d6516b0caacd1c7b345fcdb5211334e4886111dc565b5061194e7f0da06bffcb63442de88b7f8385468eaf51e47079d4fa96875938e2c27c451deb886111dc565b506119797f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a876111dc565b506119a47f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a886111dc565b508315610f7b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001610f72565b60008281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff1661083e576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016115ad565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661106d576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611af382611b68565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611b38576107538282611c10565b61083e611c86565b61106d611cbe565b611b50611cbe565b61106d611d25565b611b60611cbe565b61106d611d2d565b806001600160a01b03163b600003611bb7576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016115ad565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611c2d91906124d8565b600060405180830381855af49150503d8060008114611c68576040519150601f19603f3d011682016040523d82523d6000602084013e611c6d565b606091505b5091509150611c7d858383611d7e565b95945050505050565b341561106d576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661106d576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111b6611cbe565b611d35611cbe565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b606082611d9357611d8e82611df6565b611def565b8151158015611daa57506001600160a01b0384163b155b15611dec576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024016115ad565b50805b9392505050565b805115611e065780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611e4a57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611def57600080fd5b80356001600160a01b0381168114611e9157600080fd5b919050565b600080600060608486031215611eab57600080fd5b611eb484611e7a565b95602085013595506040909401359392505050565b600060208284031215611edb57600080fd5b5035919050565b60008060408385031215611ef557600080fd5b82359150611f0560208401611e7a565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611f5057600080fd5b611f5983611e7a565b9150602083013567ffffffffffffffff811115611f7557600080fd5b8301601f81018513611f8657600080fd5b803567ffffffffffffffff811115611fa057611fa0611f0e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561200c5761200c611f0e565b60405281815282820160200187101561202457600080fd5b816020840160208301376000602083830101528093505050509250929050565b60008083601f84011261205657600080fd5b50813567ffffffffffffffff81111561206e57600080fd5b60208301915083602082850101111561208657600080fd5b9250929050565b60008060008060008060a087890312156120a657600080fd5b6120af87611e7a565b955060208701359450604087013567ffffffffffffffff8111156120d257600080fd5b6120de89828a01612044565b90955093505060608701359150608087013567ffffffffffffffff81111561210557600080fd5b87016080818a03121561211757600080fd5b809150509295509295509295565b60008060008060008086880360a081121561213f57600080fd5b602081121561214d57600080fd5b5086955061215d60208801611e7a565b945060408701359350606087013567ffffffffffffffff81111561218057600080fd5b61218c89828a01612044565b979a9699509497949695608090950135949350505050565b6000602082840312156121b657600080fd5b611def82611e7a565b60005b838110156121da5781810151838201526020016121c2565b50506000910152565b60208152600082518060208401526122028160408501602087016121bf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000806000806080858703121561224a57600080fd5b61225385611e7a565b935061226160208601611e7a565b925061226f60408601611e7a565b915061227d60608601611e7a565b905092959194509250565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6001600160a01b036122e282611e7a565b1682526001600160a01b036122f960208301611e7a565b1660208301526040818101359083015260006060820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261234157600080fd5b820160208101903567ffffffffffffffff81111561235e57600080fd5b80360382131561236d57600080fd5b60806060860152611c7d608086018284612288565b6001600160a01b03871681526001600160a01b038616602082015284604082015260a0606082015260006123ba60a083018587612288565b82810360808401526123cc81856122d1565b9998505050505050505050565b8481526060602082015260006123f3606083018587612288565b828103604084015261240581856122d1565b979650505050505050565b6001600160a01b0361242188611e7a565b1681526001600160a01b03861660208201526001600160a01b038516604082015283606082015260a06080820152600061245f60a083018486612288565b98975050505050505050565b838152604060208201526000611c7d604083018486612288565b60006020828403121561249757600080fd5b5051919050565b8082018082111561069b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082516124ea8184602087016121bf565b919091019291505056fea264697066735822122055804dbd7fbbb2969eaa200af8f276c6819d4e17a57c4393d150dfb57aac38c764736f6c634300081a0033"; type ZetaConnectorNonNativeConstructorParams = | [signer?: Signer]